我想将这个数组打印到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 />";
}
?>
答案 0 :(得分:2)
你的困难在于你定义阵列的方式:
$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";
}
请注意,这不是一个干净的解决方案。
答案 1 :(得分: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>";
}
}
答案 2 :(得分:1)
foreach($array as $key=>$value){
echo $key."=>".$value;
echo "<br />";
}
答案 3 :(得分:-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 />";
}
?>