0
<?php

$array = array(a,s,d,f,g,h,j,k,l);

foreach($array as $i => &$a){
 foreach($array as $k => &$b){
    if($k = 4){
     unset($array[1]);
    }
 }

 echo $a . "\n";
}

print_r($array);

CODEPAD: http ://codepad.org/UoWhrIkv

この例で、なぜecho私だけ"a"print_r表示し、すべてを表示するのですか?ループで上手く見せることは可能echoですか?

4

4 に答える 4

5

配列または定数に文字列を入れようとしているのかどうかはわかりませんが、文字列は次のようにフォーマットする必要があります。

$array = array('a','s','d','f','g','h','j','k','l');

あなたが間違っているもう一つのことはあなたのifステートメントです

if($k == 4)

比較するには二重等号を使用する必要があります。割り当てにはシングル=記号が使用されます。

また、コードにフォーマットの問題があるため、ここで実行しようとしていることを正確に提供していただけますか。これが、aが唯一の印刷である理由である可能性があります。

于 2012-06-28T13:18:39.163 に答える
3

この例で、なぜecho私だけ"a"print_r表示し、すべてを表示するのですか?

foreachドキュメントで繰り返し処理している配列を変更すると(ここでは要素を削除します)、の動作によってforeach予期しないことが発生する可能性があります。マニュアルページのメモには次のように書かれています。

foreachは内部配列ポインターに依存しているため、ループ内でポインターを変更すると、予期しない動作が発生する可能性があります。


エコーを使ってループで上手く見せることは可能ですか?

はい、しかしそれはあなたが何を達成しようとするかに依存します。「良い表示」が実際に何を意味するかを指定していないので、推測することしかできません。

  • 新しい変数に割り当て$array、その変数をs内で使用しますforeach
  • &$a-または-参照とを使用せず、と&$bを使用するだけです。$a$b
  • -または-削除する要素を保存し、反復内の要素をスキップします。
  • -また- ...
  • -または-でもecho "good\m";

動作するコード例は次のようになります(デモ):

$array = array('a','s','d','f','g','h','j','k','l');

foreach ($array as $i => &$a) {
    echo "$a\n";
}

print_r($array);
于 2012-06-28T13:25:58.493 に答える
2

参照&$aおよび&$b)を使用しているため

于 2012-06-28T13:31:07.320 に答える
2

ここでの2つの問題:

1つ目は、次の行=の代わりに使用していることです。==

if($k = 4){

2つ目はロジックです。内側のループが同じ配列を反復処理すると、設定が繰り返し解除され$array[1]ます。

これは内側のforeachには影響しませんが、外側のforeachには影響します。したがってecho $a;、1回だけ印刷する機会があります。

ifステートメントを次のように変更します。

if($k == 4){
  unset( $b);
}

配列echo $a 全体を印刷しました(それが目的であると仮定します)。

于 2012-06-28T13:21:54.323 に答える