3

我正在使用一个返回多维 VARIANT 数组 (vt_array) 的 COM 对象,并且我正在尝试从数组中读取值。

当我使用print_r($mdArray)它时显示variant Object. (variant_get_type($mdArray)返回8204。)

我尝试使用foreach ($mdArray as $oneArray),但收到消息:

警告:Loader::getfields() [loader.getfields]:只能处理 C:\Inetpub\wwwroot\root\script\fileloader.php 中第 135 行的一维变量数组(此数组有 2 个)致命错误:未捕获的异常在 C:\Inetpub\wwwroot\root\script\fileloader.php:135 中带有消息“类型变体的对象未创建迭代器”的“异常”堆栈跟踪:#0 C:\Inetpub\wwwroot\root\script\fileloader .php(135): Loader::getfields() #1 C:\Inetpub\wwwroot\root\testloader.php(21): Loader->getfields() #2 {main} 在 C:\Inetpub\wwwroot\第 135 行的 root\script\fileloader.php

(foreach 循环在第 135 行)

我能得到的关于数组的唯一信息是使用count($mdArray)which returns 8

如果这里的任何人有任何阅读多维 VARIANT 数组的经验,请告诉我如何做到这一点。

4

1 回答 1

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 的邪恶联合产生的上述方法应该可以很好地逐个提取值。

为了解释$y1 = 0; $y2 = 1;,请记住 VBScript 函数的参数是 byref,因此除了变量之外,您不能传递任何内容。

编辑:添加$com->AllowUI = false以关闭任何屏幕上的弹出窗口。MsgBox()否则,如果从 VBScript 以某种方式调用并且没有人在服务器终端单击“确定” ,它将冻结请求。

于 2011-01-26T05:11:00.687 回答