两个循环foreach和未设置

时间:2012-06-28 13:12:50

标签: php foreach

<?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来循环播放吗?

4 个答案:

答案 0 :(得分:5)

我不确定你是否尝试在数组或常量中使用字符串,但字符串应该像这样格式化。

$array = array('a','s','d','f','g','h','j','k','l');

你错了的另一件事是你的if语句

if($k == 4)

您需要使用双等号进行比较,单个=符号用于分配。

你能不能提供你在这里想要做的事情,因为你的代码有一些格式问题,这可能就是为什么只有一个打印。

答案 1 :(得分:3)

  

为什么在此示例中echo仅显示"a"print_r显示所有优点?

修改数组时,您正在foreachDocs中进行迭代(这里删除一个元素),foreach的行为可能会给您带来意想不到的结果。手册页中的说明说:

  

由于foreach依赖于内部数组指针,因此在循环内更改它可能会导致意外行为。


  

是否可以在echo中循环播放?

是的,但这取决于您尝试实现的目标。由于你没有说明“好的展示”实际意味着什么,我们只能猜测:

  • $array分配给新变量,并在foreach s中使用该变量。
  • - 或 - 不要使用引用&$a&$b,只需使用$a$b
  • - 或 - 保存要删除的元素并跳过迭代中的元素。
  • -OR- ...
  • -OR- even 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