Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: foreach variable assignment and referencing: how-to?

I have an array: $aPerfparse as 2-dimensional array where index ranges from 0 to n-1,

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

Need to iterate through each item and set each indexes 'value' and 'label' to a sep. variable based-on the index.

Without a loop, it would be:

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

What is correct/incorrect about this?:

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

Similarly, I need to take those stored $value and $label variables and reference them later in a foreach loop.

Without a loop, it would look like:

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

What is correct/incorrect about this?:

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

Thank you!

====

After everyone's help, I have the following working:

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

I don't really have a need to flatten the array anymore. I tried the method mentioned by Mark, but the ImageTTFText function doesn't execute.

like image 466
user453366 Avatar asked Sep 24 '26 04:09

user453366


1 Answers

Firstly:

$label$key

is wrong. Should be:

$label.$key

You need to concatenate the variables with a dot(.).

Didn't understand the second part of the question. Can you just paste a var_dump of the array so we can get a clearer understanding of the structure?

like image 127
Tilman Koester Avatar answered Sep 25 '26 19:09

Tilman Koester