3

我有一个数组: $aPerfparse 作为二维数组,其中索引范围从 0 到 n-1,

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

需要遍历每个项目并将每个索引“值”和“标签”设置为 sep。基于索引的变量。

如果没有循环,它将是:

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

我真的不再需要展平阵列了。我尝试了Mark提到的方法,但是ImageTTFText函数没有执行。

4

4 回答 4

1

首先:

$label$key

是错的。应该:

$label.$key

您需要使用点 (.) 连接变量。

没看懂问题的第二部分。您可以粘贴数组的 var_dump 以便我们更清楚地了解结构吗?

于 2010-09-21T01:53:22.680 回答
1

在我看来,您可能会将 foreach 与简单的 for 循环混淆。

如果您有一个如下所示的数组:

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
        )

)

您可以按如下方式访问键/值的迭代。


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

希望有帮助。

于 2010-09-21T01:56:46.723 回答
0

你有一个二维数组。这些foreach语句会为您遍历第一个维度。这应该有效:

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

另外,我认为你不应该$在你的变量名中包含,当然除了在名字前面。

于 2010-09-21T01:45:53.113 回答
0

为什么不只是做

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

除其他外,我认为您对变量变量的使用是不正确的。你真的应该有这样的东西:

${'value'.$key}

但实际上你应该只使用一个数组而不是变量变量——因为你已经有了一个数组,所以没有必要将它展平(正如我在上面展示的那样)。

于 2010-09-21T01:53:59.610 回答