Reputation: 75
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.
Upvotes: 3
Views: 2460
Reputation: 77054
Why not just do
foreach ( $aPerfdata as $value ) {
ImageTTFText($img, $fontSize, $fontRotation, 2, $fontSize+$sz, $oShadow, $fontFile, $value['label'] . ":" . " " . $value['value']);
$sz=$sz+40;
}
Among other things I think your use of variable variables is incorrect. You should really have something like:
${'value'.$key}
But really you should just be using an array rather than variable variables - and since you already have an array there's no real need to flatten it (as I show you above).
Upvotes: 0
Reputation: 41
It looks to me like you might be confusing foreach with a simple for loop.
If you have an array that looks like this:
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
)
)
You can access iterate over the keys/values as follows.
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'];
}
Hope that helps.
Upvotes: 1
Reputation: 1739
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?
Upvotes: 1
Reputation: 29658
You have a two dimensional array. The foreach
statements iterates through the first dimension for you. This should work:
foreach ( $aPerfdata as $item ) {
$value = $item['value'];
$label = $item['label'];
}
Also, I don't think you should include $
in your variable name, other than of course in front of the name.
Upvotes: 0