Как прочитать из многомерного варианта массива, возвращаемого из объекта COM в PHP?

StackOverflow https://stackoverflow.com/questions/4800728

Вопрос

Я работаю с объектом COM, который возвращает многомерный вариант варианта (vt_array), и я пытаюсь прочитать значения из массива.

Когда я использую print_r($mdArray) он отображается variant Object. (variant_get_type($mdArray) возврат 8204.)

Я пытался использовать foreach ($mdArray as $oneArray) Но я получаю сообщение:

Предупреждение: Loader :: getFields () [loader.getFields]: может обрабатывать только массивы вариантов отдельных вариантов (этот массив имеет 2) в C: inetpub wwwroot root script fileLoader.php в строке 135 Фатальная ошибка: непредучанное исключение 'Exception' с помощью объекта Type Office of Type не создал итератор "в C: inetpub wwwroot root script fileLoader.php: 135 Stack Trace: #0 C: inetpub wwwroot root script fileloaderer .php (135): Loader :: getFields () #1 c: inetPub wwwroot root testloader.php (21): Loader-> getFields () #2 {main} брошен в C: inetpub wwwroot root script fileloader.php в строке 135

(Цикл Foreach находится на линии 135)

Единственная информация, которую я могу получить о массиве, - это использование count($mdArray) который возвращается 8.

Если у кого -то здесь есть какой -либо опыт чтения из многомерных вариантов массивов, пожалуйста, скажите мне, как это можно сделать.

Это было полезно?

Решение

Попробуйте это, чтобы извлечь значения массива через «VBScript». Да, ты правильно прочитал ...

<?php

$com = new COM("MSScriptControl.ScriptControl");
$com->Language = 'VBScript';
$com->AllowUI = false;
$com->AddCode('
    Function getArrayVal(arr, indexX, indexY)
        getArrayVal = arr(indexX, indexY)
    End Function
');

$y1 = 0;
$y2 = 1;
for ($x=0; $x < count($mdArray); $x++) {
    echo $com->Run('getArrayVal', $mdArray, $x, $y1) . ": ";
    echo $com->Run('getArrayVal', $mdArray, $x, $y2) . "\n";
    }

?>

Протестировал хорошее на массиве, созданном VBScript, который в противном случае дал мне те же проблемы и ошибки, что и вы, когда вы пытаетесь заставить его вести себя как массив PHP. Вышеуказанный метод, порожденный нечестивым союзом PHP и VBScript, должен извлекать значения по частям.

Объяснять $y1 = 0; $y2 = 1;, Имейте в виду, что параметры функции VBScript - это Byref, поэтому вы не можете ничего пройти, кроме переменной.

Редактировать: Добавлен $com->AllowUI = false Чтобы отключить любые всплывающие окна на экране. В противном случае это заморозило бы запрос, если MsgBox() Каким -то образом был вызван из VBScript, и никто не был на терминале сервера, чтобы щелкнуть «ОК».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top