ホームページ >バックエンド開発 >PHPチュートリアル >foreach を使用して 2 次元配列をループした後の関連問題

foreach を使用して 2 次元配列をループした後の関連問題

WBOY
WBOYオリジナル
2016-06-13 13:45:49900ブラウズ

foreach を使用して 2 次元配列をループした後の問題
2 回ループすると 2 回目のループが表示されませんが、1 回目のループをコメントアウトすると 2 回目のループの内容が正常に表示されます。
どれですか、お友達が理由を知っていたら教えてください、ありがとうございます。


PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
    $products2 = array(
     array('名称' => '苹果','数量' => 6,'单价' => 12.2),
     array('名称' => '香蕉','数量' => 2,'单价' => 15.1),
     array('名称' => '西瓜','数量' => 3,'单价' => 25.3)    
    );

//循环一
    for ($i1=0;$i1<count($products2);$i1++) {
     foreach ($products2[$i1] as $myvalues) {
     echo $myvalues.'|';
     }
     echo '<br />';
    }

//循环二
   // reset($products2); 就算加上重设指针,下面的循环还是显示不出来,但是如果把循环一注释掉的话,循环二就能正常显示了,哪位朋友知道原因的请告诉一下,谢谢了!
    for ($i2=0;$i2<count($products2);$i2++) {
     while (!!list($var1,$var2) = each($products2[$i2])) {
        echo $var1.'-----'.$var2.'|';
     }
     echo '<br />';
    }




オンラインで待っています、よろしくお願いします!

-----解決策---------
可能なサブ配列へのこのポインタもリセットできます。

for ポインタの問題はありません。

foreach はポインタを移動する可能性があります。具体的にテストしてください。

それぞれは確実にポインタを移動します。


for、foreach、および each を使用して、それらをすべてテストできます。

------解決策------------------
最初の走査ラウンドは、$products2 ではなく、$products2[$i1] を対象とします。つまり、reset() は $products2[$i1] であり、$products2 のポインタはまったく変更されていません。
------解決策------------------
PHP コード

<?php

 $products2 = 配列(
     array('名前' => 'リンゴ', '数量' => 6, '単価' => 12.2),
     array('名前' => 'バナナ', '数量' => 2, '単価' => 15.1),
     array('名前' => 'スイカ', '数量' => 3, '単価' => 25.3)
    );

// ループ 1
    for ($i1=0;$i1<count($products2);$i1++) {
     foreach ($products2[$i1] as $myvalues) {
     echo $myvalues.'|';
      reset($products2[$i1]);//この文を追加するだけです。reset($products2) の代わりに、reset($products2[$i1]) を使用する必要があります。
     }
     echo '<br />';
    }

// ループ 2
       for ($i2=0;$i2<count while each echo><div class="clear"></div></count>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。