你如何从PHP中的COM对象返回的多维变量数组中读取?

时间:2011-01-26 01:47:52

标签: php multidimensional-array variant comobject

我正在使用一个返回多维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阵列的经验,请告诉我如何做到这一点。

1 个答案:

答案 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调用并且没有人在服务器终端点击“确定”,它将冻结请求。