2010-09-21 20 views
3

je un tableau: $ aPerfparse en tant que tableau à 2 dimensions où l'indice varie de 0 à n-1,PHP: foreach assignation de variables et référencement: comment?

* aPerfparse[index]['label']   - label of the perfdata 
*     ['value']   - actual perfdata 
*     ['uom']   - unit of measurement (might be NULL) 

besoin pour parcourir chaque élément et fixé de la valeur de chaque index et « label » à un sep. variable basée sur l'index.

Sans une boucle, il serait:

$value0 = $aPerfdata[0]['value']; 
$value1 = $aPerfdata[1]['value']; 

ce qui est correct/incorrect de cette ?:

foreach ($aPerfdata as $key => $value) { 
    $value$key = $aPerfdata[$key]['value']; 
    $label$key = $aPerfdata[$key]['label']; 
} 

De même, je dois prendre les valeurs $ stockées et les variables $ label et référencez-les plus tard dans une boucle foreach.

Sans une boucle, il ressemblerait à ceci:

ImageTTFText($img, $fontSize, $fontRotation, 2, $fontSize+2, $oShadow, $fontFile, $label0 . ":" . " " . $value0); 
ImageTTFText($img, $fontSize, $fontRotation, 2, $fontSize+40, $oShadow, $fontFile, $label1 . ":" . " " . $value1); 

ce qui est correct/incorrect de cette ?:

foreach ($aPerfdata as $key => $value) { 
    ImageTTFText($img, $fontSize, $fontRotation, 2, $fontSize+$sz, $oShadow, $fontFile, $label$key . ":" . " " . $value$key); 
    sz=$sz+40; 
} 

Merci!

====

Après l'aide de tout le monde, j'ai le travail suivant:

foreach ($aPerfdata as $key => $value) 
{ 
    ${'label'.$key} = $aPerfdata[$key]['label']; 
    ${'value'.$key} = $aPerfdata[$key]['value']; 
} 

foreach ($aPerfdata as $key => $value) 
{ 
    ImageTTFText($img, $fontSize, $fontRotation, 2, $fontSize+$sz, $oShadow, $fontFile, ${'label'.$key} . ":" . " " . ${'value'.$key}); 
    $sz=$sz+40; 
} 

Je n'ai pas vraiment besoin d'aplatir le tableau plus. J'ai essayé la méthode mentionnée par Mark, mais la fonction ImageTTFText ne s'exécute pas.

+0

'$ label $ key' =>' $ {'label'. $ Clé} ' – Wrikken

+0

merci - nouveau à php. – user453366

+0

Que voulez-vous dire qu'il ne s'exécute pas? Avez-vous une erreur? Un avertissement? Pouvez-vous nous montrer plus de votre code? La section montrée est correcte. –

Répondre

0

Pourquoi ne pas faire seulement

foreach ($aPerfdata as $value) { 
    ImageTTFText($img, $fontSize, $fontRotation, 2, $fontSize+$sz, $oShadow, $fontFile, $value['label'] . ":" . " " . $value['value']); 
    $sz=$sz+40; 
} 

Entre autres choses, je pense que votre utilisation de variables variables est incorrecte.Vous devriez vraiment avoir quelque chose comme:

${'value'.$key} 

Mais vraiment vous devriez juste être en utilisant un tableau plutôt que des variables variables - et puisque vous avez déjà un tableau il n'y a pas de réel besoin pour l'aplatir (comme je vous montre ci-dessus).

+0

J'aime ça, je ne l'ai pas fait initialement parce que j'avais besoin de chaque var pour un calcul hauteur/largeur, mais je contourne cela maintenant. Malheureusement, cela ne génère pas les images correctes que la fonction (ImageTTFText) est supposée aussi. Pas certain de pourquoi. – user453366

+0

@user alors vous devez fournir un peu plus de détails sur ce que cela signifie de ne pas travailler –

+0

édité ci-dessus, merci! – user453366

0

Vous avez un tableau à deux dimensions. Les instructions foreach parcourent la première dimension pour vous. Cela devrait fonctionner:

foreach ($aPerfdata as $item) { 
    $value = $item['value']; 
    $label = $item['label']; 
} 

Aussi, je ne pense pas que vous devriez inclure dans votre $ nom de variable, autre que bien sûr devant le nom.

+0

Vous ne comprenez pas clairement la question ou les variables variables, vous suggérez de relire ou de faire d'autres recherches. –

+0

@Mark; Oui, j'ai mal compris la question en la lisant rapidement. Vous m'avez bien eu. Mais ce n'est pas à vous de me dire ce dont j'ai besoin pour faire de la recherche. qu'est-ce qui te fait penser que tu peux insulter mon intelligence comme ça? –

+0

Je n'ai pas insulté votre intelligence, je vous ai simplement suggéré de mener l'une des deux activités suivantes: lire de plus près (semble parfaitement raisonnable) ou rechercher votre réponse plus loin - cette dernière option pourrait être triviale, et c'est juste une option . –

1

Premièrement:

$label$key 

est faux. Devrait être:

$label.$key 

Vous devez concaténer les variables avec un point (.).

Je n'ai pas compris la deuxième partie de la question. Pouvez-vous simplement coller un var_dump du tableau afin que nous puissions avoir une meilleure compréhension de la structure?

+1

Je "ne comprends clairement pas la question" aussi bien. Peut-être que c'est votre question, cependant. –

1

Il me semble que vous pourriez être déroutant foreach avec une boucle simple.

Si vous avez un tableau qui ressemble à ceci:

Array 
(
    [0] => Array 
     (
      [label] => red 
      [value] => 8 
      [uom] => cm 
     ) 

    [1] => Array 
     (
      [label] => green 
      [value] => 6 
      [uom] => m 
     ) 

    [2] => Array 
     (
      [label] => blue 
      [value] => 34 
      [uom] => m 
     ) 

) 

Vous pouvez accéder à itérer sur les touches/valeurs comme suit.


foreach($arr as $array_key => $array_value) 
{ 
     // obviously you don't need to assign these. it's just for demonstration 
     $key = $array_key; 
     $label = $array_value['label']; 
     $value = $array_value['value']; 
     $uom = $array_value['uom']; 
} 

Espérons que ça aide.