我正在使用一个返回多维 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行135致命错误:未抓获 带信息的 "异常 未创建变体类型的对象 中的 "迭代器"。 C:\Inetpub\wwwroot oot\script\fileloader.php:135 堆栈跟踪:#0 C:\Inetpub\wwwroot oot\script\fileloader.php(135):加载器::getfields() #1 C:\Inetpub\wwwroot oot estloader.php(21):Loader->getfields() #2 {main} 抛出 于 C:\Inetpub\wwwroot oot\script\fileloader.php 第 135 行

(foreach 循环位于第 135 行)

我可以获得有关数组的唯一信息是使用 count($mdArray) 返回 8.

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

有帮助吗?

解决方案

尝试通过“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