<?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
来循环播放吗?
答案 0 :(得分:5)
我不确定你是否尝试在数组或常量中使用字符串,但字符串应该像这样格式化。
$array = array('a','s','d','f','g','h','j','k','l');
你错了的另一件事是你的if语句
if($k == 4)
您需要使用双等号进行比较,单个=符号用于分配。
你能不能提供你在这里想要做的事情,因为你的代码有一些格式问题,这可能就是为什么只有一个打印。
答案 1 :(得分:3)
为什么在此示例中
echo
仅显示"a"
和print_r
显示所有优点?
修改数组时,您正在foreach
Docs中进行迭代(这里删除一个元素),foreach
的行为可能会给您带来意想不到的结果。手册页中的说明说:
由于foreach依赖于内部数组指针,因此在循环内更改它可能会导致意外行为。
是否可以在echo中循环播放?
是的,但这取决于您尝试实现的目标。由于你没有说明“好的展示”实际意味着什么,我们只能猜测:
$array
分配给新变量,并在foreach
s中使用该变量。&$a
和&$b
,只需使用$a
和$b
。echo "good\m";
?工作代码示例可能如下所示(Demo):
$array = array('a','s','d','f','g','h','j','k','l');
foreach ($array as $i => &$a) {
echo "$a\n";
}
print_r($array);
答案 2 :(得分:2)
这里有两个问题:
首先,您在此行中使用的是=
而不是==
:
if($k = 4){
第二个是你的逻辑,因为当你的内循环遍历同一个数组时,它会反复取消设置$array[1]
。
这不会影响内在的foreach,而是影响外部的foreach。所以echo $a;
有机会只打印一次。
将if
语句更改为:
if($k == 4){
unset( $b);
}
制作echo $a
print the entire array(假设这就是你想要的)。
答案 3 :(得分:2)
因为您使用的是references(&$a
和&$b
)