3 Stimmen

PHP: foreach-Variablenzuweisung und -Referenzierung: Wie geht das?

Ich habe ein Array: $aPerfparse als 2-dimensionales Array, dessen Index von 0 bis n-1 reicht,

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

Sie müssen jedes Element durchlaufen und die Indizes "Wert" und "Bezeichnung" auf der Grundlage des Indexes auf eine getrennte Variable setzen.

Ohne eine Schleife wäre es das:

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

Was ist daran richtig/unrichtig?

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

Ebenso muss ich die gespeicherten Variablen $value und $label nehmen und später in einer foreach-Schleife auf sie verweisen.

Ohne eine Schleife würde es so aussehen:

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

Was ist daran richtig/unrichtig?

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

Ich danke Ihnen!

\====

Nach der Hilfe aller habe ich das Folgende zum Laufen gebracht:

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

Ich brauche das Feld nicht mehr zu glätten. Ich habe die von Mark erwähnte Methode ausprobiert, aber die Funktion ImageTTFText wird nicht ausgeführt.

1voto

Tilman Koester Punkte 1729

Erstens:

$label$key

ist falsch. Sollte sein:

$label.$key

Sie müssen die Variablen mit einem Punkt(.) verketten.

Ich habe den zweiten Teil der Frage nicht verstanden. Können Sie einfach einen var_dump des Arrays einfügen, damit wir die Struktur besser verstehen können?

1voto

Patrick Punkte 41

Es sieht für mich so aus, als würden Sie foreach mit einer einfachen for-Schleife verwechseln.

Wenn Sie ein Array haben, das wie folgt aussieht:

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
        )

)

Sie können auf die Iteration über die Schlüssel/Werte wie folgt zugreifen.

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'];
}

Ich hoffe, das hilft.

0voto

Chris Laplante Punkte 28784

Sie haben ein zweidimensionales Array. Die foreach Anweisungen iteriert für Sie durch die erste Dimension. Dies sollte funktionieren:

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

Ich glaube auch nicht, dass Sie Folgendes einschließen sollten $ in Ihrem Variablennamen, außer natürlich vor dem Namen.

0voto

Mark Elliot Punkte 71774

Warum nicht einfach tun

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

Unter anderem bin ich der Meinung, dass Ihre Verwendung von variablen Variablen nicht korrekt ist. Sie sollten wirklich etwas wie:

${'value'.$key}

Aber wirklich sollten Sie nur mit einem Array statt Variablen Variablen - und da Sie bereits ein Array gibt es keine wirkliche Notwendigkeit, um es zu glätten (wie ich Ihnen oben zeigen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X