PHP: foreach присваивание переменных и ссылки: как? - PullRequest
3 голосов
/ 21 сентября 2010

У меня есть массив: $ aPerfparse как двумерный массив, где индекс варьируется от 0 до n-1,

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

Необходимо перебирать каждый элемент и устанавливать для каждого индекса значение и меткув сентябре.переменная на основе индекса.

Без цикла это будет:

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

Что правильно / неверно в этом ?:

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

Точно так же, мне нужно взять эти сохраненные $переменные value и $ label и ссылки на них позже в цикле foreach.

Без цикла это выглядело бы так:

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

Что в этом правильного / неправильного ?:

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

Спасибо!

====

После всеобщей помощи у меня работает следующее:

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

У меня больше нет необходимости выравнивать массив.Я попробовал метод, упомянутый Марком, но функция ImageTTFText не выполняется.

Ответы [ 4 ]

1 голос
/ 21 сентября 2010

Мне кажется, что вы можете путать foreach с простым циклом for.

Если у вас есть массив, который выглядит так:ключи / значения следующим образом.


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

Надеюсь, что поможет.

1 голос
/ 21 сентября 2010

Во-первых:

$label$key

неверно.Должно быть:

$label.$key

Вам нужно объединить переменные с точкой (.).

Не понял вторую часть вопроса.Вы можете просто вставить var_dump массива, чтобы мы могли получить более четкое представление о структуре?

0 голосов
/ 21 сентября 2010

Почему бы просто не сделать

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

Помимо прочего, я думаю, что вы используете переменные переменные неправильно.У вас действительно должно быть что-то вроде:

${'value'.$key}

Но на самом деле вы должны просто использовать массив, а не переменные переменные - и, поскольку у вас уже есть массив, нет реальной необходимости его выравнивать (как я покажу вам выше)).

0 голосов
/ 21 сентября 2010

У вас есть двумерный массив. Операторы foreach проходят через первое измерение для вас. Это должно работать:

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

Кроме того, я не думаю, что вы должны включать $ в имя вашей переменной, кроме, конечно, перед именем.

...