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

4

4 回答 4

5

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

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

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

if($k == 4)

您需要使用双等号进行比较,单= 号用于赋值。

您是否还可以准确地提供您在此处尝试执行的操作,因为您的代码立即存在一些格式问题,这可能就是为什么 a 是唯一一个打印的原因。

于 2012-06-28T13:18:39.163 回答
3

为什么在这个例子echo中只显示我"a"print_r显示所有好?

foreach当您在Docs中修改您正在迭代的数组时(这里您删除了一个元素), 的行为foreach可能会给您带来意想不到的事情。手册页上的注释说:

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


是否可以通过回声在循环中进行良好的显示?

是的,但这取决于您要达到的目标。由于您没有具体说明“良好的表现”的实际含义,我们只能猜测:

  • 分配$array给一个新变量,并在foreachs 中使用该变量。
  • -或- 不要使用引用&$aand &$b,只使用$aand $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);
于 2012-06-28T13:25:58.493 回答
2

因为您正在使用引用&$a&$b

于 2012-06-28T13:31:07.320 回答
2

这里有两个问题:

第一个是您使用=而不是==在这一行:

if($k = 4){

第二个是你的逻辑,因为当你的内部循环迭代同一个数组时,它会反复 unset $array[1]

这不会影响内部 foreach,但会影响外部。所以echo $a;只有一次打印的机会。

if将您的声明更改为:

if($k == 4){
  unset( $b);
}

打印echo $a 整个数组(假设这就是你想要的)。

于 2012-06-28T13:21:54.323 回答