每个循环和未设置两个循环


Two loop foreach and unset

<?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