<?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);
密码本:http://codepad.org/UoWhrIkv
为什么在这个例子中,echo
只向我展示"a"
,而print_r
显示所有好的?是否有可能与echo
一起循环展示好?
我不确定您是尝试在数组还是常量中包含字符串,但字符串应该像这样格式化。
$array = array('a','s','d','f','g','h','j','k','l');
你错的另一件事是你的if语句
if($k == 4)
您需要使用双等号进行比较,单个 = 符号用于分配。
您能否也提供您在这里尝试执行的操作,因为您的代码存在一些格式问题,这可能就是为什么 a 是唯一的打印。
为什么在这个例子中,
echo
只向我展示"a"
,而print_r
显示一切良好?
当您修改在 foreach
Docs 中迭代的数组时(此处删除了一个元素),foreach
的行为可能会给您带来意想不到的事情。手册页的注释说:
由于foreach依赖于内部数组指针,因此在循环中更改它可能会导致意外行为。
是否有可能用回声循环显示良好?
是的,但这取决于您要实现的目标。由于您没有具体说明"良好展示"的实际含义,我们只能猜测:
- 将
$array
分配给新变量,并在foreach
s 中使用该变量。 - -OR- 不要使用引用
&$a
和&$b
,只需使用$a
和$b
。 - -OR- 保存要删除的元素,并在迭代中跳过这些元素。
- -或-。。。
- -或者- 甚至
echo "good'm";
?
一个工作代码示例可能如下所示(演示):
$array = array('a','s','d','f','g','h','j','k','l');
foreach ($array as $i => &$a) {
echo "$a'n";
}
print_r($array);
这里有两个问题:
首先是你在此行中使用=
而不是==
:
if($k = 4){
第二个是你的逻辑,因为当你的内部循环迭代同一个数组时,它会反复取消设置$array[1]
。
这并不影响内在的,而是外在的。因此echo $a;
只有一次打印的机会。
将if
语句更改为:
if($k == 4){
unset( $b);
}
让echo $a
打印整个阵列(假设这就是你要做的)。
因为你正在使用引用(&$a
和&$b
)