我正在使用一个返回多维VARIANT数组(vt_array)的COM对象,我正在尝试从数组中读取值。
当我使用print_r($mdArray)
时,它会显示variant Object
。
(variant_get_type($mdArray)
返回8204
。)
我尝试使用foreach ($mdArray as $oneArray)
,但收到了消息:
警告:Loader :: getfields()[loader.getfields]:只能处理 单维变体数组(这个 数组有2)in C:\的Inetpub \ wwwroot的\ ROOT \脚本\ fileloader.php 第135行致命错误:未捕获 带有消息的异常'异常' '类型变体的对象没有创建 一个迭代器' C:\的Inetpub \ wwwroot的\ ROOT \脚本\ fileloader.php:135 堆栈跟踪:#0 C:\的Inetpub \ wwwroot的\根\脚本\ fileloader.php(135): Loader :: getfields()#1 C:\的Inetpub \ wwwroot的\根\ testloader.php(21): Loader-> getfields()#2 {main}抛出 在 C:\的Inetpub \ wwwroot的\ ROOT \脚本\ fileloader.php 在第135行
(foreach循环在第135行)
我可以获得的关于数组的唯一信息是使用返回count($mdArray)
的{{1}}。
如果这里的任何人有阅读多维VARIANT阵列的经验,请告诉我如何做到这一点。
答案 0 :(得分:4)
尝试通过“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的unholy联合产生的上述方法应该一点一点地提取值。
要解释$y1 = 0; $y2 = 1;
,请记住VBScript函数的参数是byref,因此除了变量之外,您不能传递任何内容。
编辑:添加$com->AllowUI = false
以关闭所有屏幕弹出窗口。否则,如果MsgBox()
以某种方式从VBScript调用并且没有人在服务器终端点击“确定”,它将冻结请求。