Pregunta

Estoy trabajando con un objeto COM que devuelve una matriz de variantes multidimensional (VT_Array), e estoy tratando de leer los valores de la matriz.

Cuando uso print_r($mdArray) muestra variant Object. (variant_get_type($mdArray) devoluciones 8204.)

Intenté usar foreach ($mdArray as $oneArray) Pero recibo el mensaje:

Advertencia: Loader :: getFields () [loader.getFields]: solo puede manejar matrices de variantes de dimensión única (esta matriz tiene 2) en c: inetpub wwwroot root script fileloader.php en línea 135 Error fatal: excepción sin poder 'Excepción' con mensaje 'Objeto de tipo Variant no creó un iterador' en c: inetpub wwwroot root script fileloader.php: 135 pila traza: #0 c: inetpub wwwroot root script fileloader .php (135): loader :: getFields () #1 c: inetpub wwwroot root testLoader.php (21): loader-> getfields () #2 {main} arrojado en c: inetpub wwwroot root script fileloader.php en la línea 135

(El bucle foreach está en la línea 135)

La única información que puedo obtener sobre la matriz es usar count($mdArray) que devuelve 8.

Si alguien aquí tiene alguna experiencia leyendo de matrices de variantes multidimensionales, dígame cómo se puede hacer esto.

¿Fue útil?

Solución

Intente esto para extraer los valores de matriz a través de "VBScript". Sí, lo leiste bien...

<?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";
    }

?>

Probado bien en una matriz creada por VBScript, que de lo contrario me dio exactamente los mismos problemas y errores que al tratar de coaccionarlo para que se comporte como una matriz PHP. El método anterior generado por la unión impía de PHP y VBScript debería extraer valores de pieza por pieza bien.

Para explicar $y1 = 0; $y2 = 1;, tenga en cuenta que los parámetros de la función VBScript son Byref, por lo que no puede pasar nada excepto una variable.

Editar: Adicional $com->AllowUI = false para apagar cualquier ventana emergente en pantalla. De lo contrario, congelaría la solicitud si un MsgBox() De alguna manera se llamó desde VBScript y nadie estaba en el terminal del servidor para hacer clic en 'Aceptar'.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top