Question

Je travaille avec un objet COM qui renvoie un tableau de VARIANT (Multidimensional VT_ARRAY), et je suis en train de lire les valeurs du tableau.

Quand j'utilise print_r($mdArray) il affiche variant Object. (Retourne variant_get_type($mdArray) 8204.)

J'ai essayé d'utiliser foreach ($mdArray as $oneArray) mais je reçois le message:

Avertissement: Chargeur :: getfields () [loader.getfields]: Ne peut poignée matrices de dimension variant unique (ce tableau a 2) C: \ Inetpub \ wwwroot \ root \ scripts \ fileloader.php sur la ligne 135 Fatal error: Uncaught exception 'Exception' avec le message « Objet de la variante de type n'a pas créé dans « un itérateur C: \ Inetpub \ wwwroot \ root \ scripts \ fileloader.php: 135 Trace de la pile: # 0 C: \ Inetpub \ wwwroot \ root \ scripts \ fileloader.php (135): Chargeur :: getfields () # 1 C: \ Inetpub \ wwwroot \ root \ testloader.php (21): Loader-> getfields () # 2 {main} jeté dans C: \ Inetpub \ wwwroot \ root \ scripts \ fileloader.php sur la ligne 135

(La boucle foreach est sur la ligne 135)

La seule information que je peux obtenir sur le tableau est à l'aide count($mdArray) qui retourne 8.

Si quelqu'un a ici une expérience de lecture de tableaux VARIANT multidimensionnels me dire comment cela peut se faire.

Était-ce utile?

La solution

Essayez ceci pour extraire des valeurs de tableau par « VBScript ». Oui, vous avez bien lu ...

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

?>

bonne Testé sur un tableau créé VBScript, qui, autrement, m'a donné les problèmes exactement les mêmes erreurs et que vous en essayant de le contraindre à se comporter comme un tableau PHP. La méthode ci-dessus donné naissance par l'union contre nature de PHP et VBscript doit extraire des valeurs morceau par morceau très bien.

Pour expliquer $y1 = 0; $y2 = 1;, garder à l'esprit les paramètres de la fonction VBScript sont byref, de sorte que vous ne pouvez pas passer quoi que ce soit à l'exception d'une variable.

Modifier: Ajout $com->AllowUI = false pour fermer toutes les fenêtres pop-up à l'écran. Dans le cas contraire, il gèlerait la demande si un MsgBox() en quelque sorte été appelé à partir de VBScript et personne ne se trouvait au terminal serveur de cliquer sur « ok ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top