php - 在 PHP 中如何读取从 COM 对象返回的多维变体数组?

标签 php multidimensional-array variant comobject

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

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

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

Warning: Loader::getfields() [loader.getfields]: Can only handle single dimension variant arrays (this array has 2) in C:\Inetpub\wwwroot\root\script\fileloader.php on line 135 Fatal error: Uncaught exception 'Exception' with message 'Object of type variant did not create an Iterator' in C:\Inetpub\wwwroot\root\script\fileloader.php:135 Stack trace: #0 C:\Inetpub\wwwroot\root\script\fileloader.php(135): Loader::getfields() #1 C:\Inetpub\wwwroot\root\testloader.php(21): Loader->getfields() #2 {main} thrown in C:\Inetpub\wwwroot\root\script\fileloader.php on line 135

(foreach 循环在第 135 行)

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

如果这里有人有读取多维 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 调用并且没有人在服务器终端单击“确定”,它将卡住请求。

关于php - 在 PHP 中如何读取从 COM 对象返回的多维变体数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800728/

相关文章:

php - 使用 Amazon SES sendRawEmail 进行电子邮件编码

c++ - 如何更改 C++ 对象的类(实现可变类型)

c - 如何在 C 编程中取消引用多维数组?

c - 为什么这总是指向相似的值?

c++ - 在编译时获取 std::variant 类型

c++ - 如何将此 C++ 类型列表构建为变体?

php - 无法更新我的表中的值

PHP代码不工作

javascript - 多个值在 js ajax 中不起作用

arrays - 将 2D 数组行地址传递给 1D 数组以供将来使用