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

您的困难在于您定义数组的方式:

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

php 中的数组实际上是 hashmap;当您5在上述数组上调用 index 时,它是未定义的。不会定义最多 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 回答
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 回答
1
foreach($array as $key=>$value){
    echo $key."=>".$value; 
    echo "<br />";
}
于 2013-03-05T22:03:26.180 回答
-1

您想以 $i=0 开始循环,因为 PHP 使用零索引。同样在您的循环中,您希望将交互的最大值限制在 $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 回答