3

この配列を 21 までのすべてのインデックスに出力したいのですが、このコードでは配列の長さだけを出力しています。forループで配列全体を出力するにはどうすればよいですか?

<?php
$array=array(0=>"hello",
             1=>"world", 
             2=>"this", 
             3=>"is", 
             4=>"an", 
             20=>"array",
             21=>"code" );

$length=count($array);

for($i=0;$i<$length;$i++){
         echo "$i=>".$array[$i]; 
         echo "<br />";

      }
?>
4

4 に答える 4

2

forループを使用したソリューション:

$array=array(0=>"hello",
             1=>"world", 
             2=>"this", 
             3=>"is", 
             4=>"an", 
             20=>"array",
             21=>"code" );

$max = max(array_flip($array)); // What if max array key is 10^5 ?
for($i=0;$i<=$max;$i++){
    if(isset($array[$i])){
        echo "$i=>".$array[$i]."<br>";
    }
}
于 2013-03-05T22:18:57.210 に答える
2

あなたの難しさは、配列を定義する方法です:

$array=array(0=>"hello",
             1=>"world", 
             2=>"this", 
             3=>"is", 
             4=>"an", 
             20=>"array",
             21=>"code" );

PHP の配列は実際にはハッシュマップです。上記の配列でindex を呼び出すと5、未定義になります。最大 20 のインデックス アイテムは定義されず、これらは次のように通知されます。

PHP Notice:  Undefined offset:  5

反復変数として配列の長さを使用し、その変数を正確に呼び出すため、コード内で位置 20 と 21 を取得することはありません。

これは、アレイがコンピューターにどのように見えるかです。

0 => "hello"
1 => "world"
2 => "this"
3 => "is"
4 => "an"
5 => NULL
6 => NULL
7 => NULL
... //elided for succinctness 
19 => NULL
20 => "array"
21 => "code"

あなたが呼び出すとき、$array[7]それは何も返すことができません。呼び出す$array[20]と、「配列」が返されます。

本当に必要なのは foreach ループです。

foreach($array as $key => $val) {
    //key will be one of { 0..4, 20..21}
    echo "$key is $value\n";
}

その結果:

$ php test.php 
0 is hello
1 is world
2 is this
3 is is
4 is an
20 is array
21 is code

for ループを使用する必要がある場合:

$key_array = array_keys($array);
for($i=0;$i<count($key_array);$i++){
   $key = $key_array[$i];
   echo "$key => ".$array[$key]."\n";
}

これはクリーンなソリューションではないことに注意してください。

于 2013-03-05T22:12:50.430 に答える
1
foreach($array as $key=>$value){
    echo $key."=>".$value; 
    echo "<br />";
}
于 2013-03-05T22:03:26.180 に答える
-1

PHP はゼロ インデックスを使用するため、ループを $i=0 で開始します。また、ループ内で、反復の最大値を $i に制限したい

  <?php
    $array=array(0=>"hello",
                 1=>"world", 
                 2=>"this", 
                 3=>"is", 
                 4=>"an", 
                 20=>"array",
                 21=>"code" );

    $length=count($array);

    for($i=0;$i<$length;$i++){
             echo "$i=>".$array[$i]; 
             echo "<br />";

          }
    ?>
于 2013-03-05T22:03:52.280 に答える