Wie lesen Sie aus einem mehrdimensionalen Varianten -Array, das von einem COM -Objekt in PHP zurückgegeben wurde?

StackOverflow https://stackoverflow.com/questions/4800728

Frage

Ich arbeite mit einem COM -Objekt, das ein mehrdimensionales Variante -Array (vt_array) zurückgibt, und ich versuche, Werte aus dem Array zu lesen.

Wenn ich benutze print_r($mdArray) es zeigt an variant Object. (variant_get_type($mdArray) kehrt zurück 8204.)

Ich habe versucht zu benutzen foreach ($mdArray as $oneArray) Aber ich bekomme die Nachricht:

WARNUNG: Loader :: getfields () [lader.getFields]: Kann nur eine Einzeldimensionsvarrys (dieses Array hat 2) in C: inetpub wwwroot root script fileloader.php in Zeile 135 Fataler Fehler: Unverzerrte Ausnahmeverzerrung 'Ausnahme' mit Meldung 'Objekt vom Typ Variante wurde in C: inetpub wwwroot root script fileloader.php: 135 Stack Trace: #0 C: inetpub wwwroot root script fileloader erstellt. .php (135): lader :: getfields () #1 c: inetpub wwwroot root testloader.php (21): lader-> getfields () #2 {main} in C: inetpub wwwroot geworfen root script fileloader.php in Zeile 135

(Die Foreach -Schleife ist in Zeile 135)

Die einzigen Informationen, die ich über das Array erhalten kann, ist die Verwendung count($mdArray) was kehrt zurück 8.

Wenn hier jemand Erfahrung mit mehrdimensionalen Varianten -Arrays hat, sagen Sie mir bitte, wie dies getan werden kann.

War es hilfreich?

Lösung

Versuchen Sie dies, um Array -Werte durch "VBScript" zu extrahieren. Ja, du hast das richtig gelesen ...

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

?>

Gut auf ein von VBScript erstellter Array getestet, das mir ansonsten genau die gleichen Probleme und Fehler wie Sie gab, wenn ich versuchte, es zu zwingen, sich wie ein PHP-Array zu verhalten. Die obige Methode, die durch die unheilige Vereinigung von PHP und VBSCript hervorgebracht wurde, sollte Werte für Stück genau extrahieren.

Erklären $y1 = 0; $y2 = 1;, Beachten Sie, dass die Parameter der VBScript -Funktion ByRef sind, sodass Sie nichts über eine Variable weitergeben können.

Bearbeiten: Hinzugefügt $com->AllowUI = false So schließen Sie alle Popups auf dem Bildschirm aus. Sonst würde es die Anfrage einfrieren, wenn a MsgBox() irgendwie wurde von VBScript aufgerufen und niemand war am Server -Terminal, um auf "OK" zu klicken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top