Как прочитать из многомерного варианта массива, возвращаемого из объекта COM в PHP?
-
22-10-2019 - |
Вопрос
Я работаю с объектом 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, и никто не был на терминале сервера, чтобы щелкнуть «ОК».