【问题标题】:Print array with for loop使用 for 循环打印数组
【发布时间】:2013-02-20 12:17:58
【问题描述】:

我想将此数组打印到最多 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 />";

      }
?>

【问题讨论】:

  • 为什么不做$i&lt;21?并更新您的输出以检查该值是否存在?
  • 把这个for($i=1;$i&lt;=$length;$i++){改成for($i=0;$i&lt;$length;$i++){
  • 应该是$i &lt; $length,而不是$i &lt;= $length
  • 那么每次插入一个元素我都必须改变长度,这就是问题所在。
  • 我非常好奇;为什么不能使用 foreach 循环?

标签: php arrays for-loop


【解决方案1】:
foreach($array as $key=>$value){
    echo $key."=>".$value; 
    echo "<br />";
}

【讨论】:

  • 对不起,我在for循环中提到了。
  • 啊抱歉..为什么只有for循环而不是foreach?
  • 我想知道有没有办法在for循环中打印?
【解决方案2】:

您希望以 $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 />";

          }
    ?>

【讨论】:

  • 但它仍然不会打印索引 20 和 21。
  • 这段代码不起作用:当它试图访问这个数组中不存在的'5'时,你会得到一个数组索引越界异常。
  • 是的,纳撒尼尔,我想打印整个数组而不得到它。
  • 为什么一定要for循环? foreach 没有可能?
  • 有人特别要求我使用 for 循环。
【解决方案3】:

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

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

php 中的数组实际上是哈希图;当您在上述数组上调用索引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";
}

请注意,这不是一个干净的解决方案。

【讨论】:

  • 我特别要求使用for循环。
  • 为明确的 for 循环编辑。
  • thanx,纳撒尼尔会做到的。
  • @NathanielFord +1 for the array_keys() 解决方案,我没想到!
【解决方案4】:

使用 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>";
    }
}

【讨论】:

  • 请注意,如果您的数组很大,这里的海报有一个非常突出的点;性能影响可能是有意义的。该解决方案检查 0 和...之间的所有可能键。例如,请查看字母“a”在哈希图中的位置。
  • @NathanielFord 是的,你完全正确,但 SO 希望这样做:p
  • 不过,有更简洁的方法可以做到这一点;您可以获取数组中的所有键,然后只遍历这些键,而不是遍历所有可能的键:如果 Web 应用程序必须在到达数组。
  • @user2113060 你应该选择 Nathaniel Ford 的解决方案,它更有效!
  • @HamZaDzCyber​​DeV,好的,我会去的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 2017-08-11
  • 1970-01-01
相关资源
最近更新 更多