如何读取 PHP 中 COM 对象返回的多维变量数组?
我正在使用一个返回多维 VARIANT 数组 (vt_array) 的 COM 对象,并且我正在尝试从该数组中读取值。
当我使用 print_r($mdArray)
时,它显示 variant Object
。 (variant_get_type($mdArray)
返回 8204
。)
我尝试使用 foreach ($mdArray as $oneArray)
但收到消息:
警告:Loader::getfields() [loader.getfields]:只能处理 单维变体数组(这 数组有 2) 中 C:\Inetpub\wwwroot\root\script\fileloader.php 第 135 行致命错误:未捕获 带有消息的异常“异常” '类型变体的对象未创建 迭代器' in C:\Inetpub\wwwroot\root\script\fileloader.php:135 堆栈跟踪:#0 C:\Inetpub\wwwroot\root\script\fileloader.php(135): 加载器::getfields() #1 C:\Inetpub\wwwroot\root\testloader.php(21): Loader->getfields() #2 {main} 抛出 在 C:\Inetpub\wwwroot\root\script\fileloader.php 第135行
(foreach 循环位于第 135 行)
我可以获得的有关数组的唯一信息是使用返回 8
的 count($mdArray)
。
如果这里有人有读取多维 VARIANT 数组的经验,请告诉我如何做到这一点。
I'm working with a COM object that returns a multidimensional VARIANT array (vt_array), and I'm trying to read values from the array.
When I use print_r($mdArray)
it displays variant Object
.
(variant_get_type($mdArray)
returns 8204
.)
I tried using foreach ($mdArray as $oneArray)
but I get the message:
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
(The foreach loop is on line 135)
The only information I can get about the array is by using count($mdArray)
which returns 8
.
If anyone here has any experience reading from multidimensional VARIANT arrays please tell me how this can be done.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试通过“VBScript”提取数组值。是的,你没看错……
在 VBScript 创建的数组上测试得很好,否则在尝试强制它像 PHP 数组一样运行时,它会给我带来与你完全相同的问题和错误。上述由 PHP 和 VBscript 的邪恶结合产生的方法应该可以很好地逐段提取值。
解释一下
$y1 = 0; $y2 = 1;
,请记住 VBScript 函数的参数是 byref,因此除了变量之外不能传递任何内容。编辑:添加了
$com->AllowUI = false
以关闭任何屏幕上的弹出窗口。否则,如果从 VBScript 中以某种方式调用MsgBox()
并且没有人在服务器终端上单击“确定”,它将冻结请求。Try this to extract array values through "VBScript". Yes, you read that right...
Tested good on a VBScript-created array, which otherwise gave me the exact same issues and errors as you when trying to coerce it to behave like a PHP array. The above method spawned by the unholy union of PHP and VBscript should extract values piece by piece just fine.
To explain
$y1 = 0; $y2 = 1;
, keep in mind the parameters of the VBScript function are byref, so you can't pass anything in except a variable.Edit: Added
$com->AllowUI = false
to shut off any on-screen popups. Otherwise it would freeze the request if aMsgBox()
somehow got called from VBScript and no one was at the server terminal to click 'ok'.