-1

=> $vこの部分を省略すると、以下のコードの 3 行目が失敗します。次のエラーが表示されます。

Warning: Illegal offset type in /home/site/page.php on line 404

5 行目をに[$k]変更すると['$k']、次のエラーが表示されます。

Notice: Undefined index: $k in /home/site/page.php on line 404

以下のようになっていると、フルで$k => $vすべてが機能します。も使いません$vforeachそれを機能させるためにループでそれが必要なのはなぜですか?

<? if ( $arr[ 'status'][ 'chain'] ) { 
     foreach ( $arr[ 'status'][ 'chain'] as $k => $v) { ?>
        <tr>
            <td class="line_item_data status_td">
                <?= $ arr[ 'status'][ 'chain'][$k][ 'message'] ?>
            </td>
            <td align="center">
                <img src="images/green_check.gif" width="20" />
            </td>
        </tr>
    <? } 
} ?>

私はこの答えを見ましたが、それが本当に当てはまるかどうかはわかりません。本当にありがとう!

4

4 に答える 4

2

どちらの方法でも、配列内のすべてのアイテムをループします。

foreach $ kを実行するだけの場合は、キーを無視して、配列内の各VALUEに$kを設定します。

$ k => $ vのままにしておくと、各KEYに$ kを設定し、キーに付加された各VALUEに$vを設定します。

たとえば、次のような配列があります。

$arr=array(
    1=>'a',
    2=>'b',
    3=>'c'
);

そして、やります:

foreach($arr as $k){
    echo "k is $k <br>";
}

出力は次のようになります。

k is a
k is b
k is c

一方、あなたがする場合

foreach($arr as $k=>$v){
    echo "k is $k and v is $v<br>";
}

出力は次のようになります。

k is 1 and v is a
k is 2 and v is b
k is 3 and v is c
于 2012-06-27T21:15:38.760 に答える
1

$k は値ですが、キーとして使用しているためです。代わりに、次のように記述します。

 <? if ( $arr[ 'status'][ 'chain'] ) { 
     foreach ( $arr[ 'status'][ 'chain'] as $k) { ?>
        <tr>
            <td class="line_item_data status_td">
                <?= $k[ 'message'] ?>
            </td>
            <td align="center">
                <img src="images/green_check.gif" width="20" />
            </td>
        </tr>
    <? } 
} ?>
于 2012-06-27T21:09:08.853 に答える
1

コンストラクト$k => $vは、コンストラクト内で配列のキーと値を反復するために使用されますforeach。値$vのみを使用して反復することはできますが、キーのみを反復することはできません$k。以下を使用した場合:

foreach ($arr['status']['chain'] as $k)

... foreach ループは構文的に有効ですが、キーではなく$k配列値が入力されます。その場合、 は配列内で有効なキーを保持していないため、配列要素$ arr[ 'status'][ 'chain'][$k][ 'message']は存在しません。$k$arr['status']['chain']

ただし、これははるかに簡単にすることができます...

ループ内で$vは、インデックスを作成しようとしている配列要素が保持されるため、次のようにアクセスするだけで済みます。

<?= $v['message'] ?>

これは に相当し$arr['status']['chain'][$k]['message']ます。したがって、最終的には$v、ループで必要ないということではなく、必要ないということ$kです。

 // Iterate the values only. Keys aren't actually needed.
 foreach ( $arr[ 'status'][ 'chain'] as $v) {
     // snip html markup..
            <?= $v[ 'message'] ?>
 }
于 2012-06-27T21:09:53.650 に答える
1

foreachを使用するときは常に値を指定する必要があります。オプションのキーです

そのような、

foreach ($array as $k => $v)

...then$kがキーで、$vが値です。もしあなたがそうするなら:

foreach ($array as $k)

...その後、キーではなく$kになります。キーだけが必要な場合は、次のことができます。

while (list($key) = each($array)) {
    echo $key;
}

...また:

while (key($array) && next($array)) {
    echo $key;
}
于 2012-06-27T21:13:47.480 に答える