3

私は配列を持っています:インデックスが0からn-1の範囲の2次元配列としての$aPerfparse、

* 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

変数をドット (.) で連結する必要があります。

質問の2番目の部分がわかりませんでした。構造をより明確に理解できるように、配列の 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

2次元配列があります。ステートメントは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 に答える