Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 两个循环foreach和unset_Php_Foreach - Fatal编程技术网

Php 两个循环foreach和unset

Php 两个循环foreach和unset,php,foreach,Php,Foreach,代码板: 为什么在这个例子中,echo只显示a,而print\r显示全部好?是否可以使用echo在循环中很好地显示?我不确定您是否尝试在数组中包含字符串或常量,但字符串的格式应如下所示 <?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,而print\r显示全部好?是否可以使用echo在循环中很好地显示?

我不确定您是否尝试在数组中包含字符串或常量,但字符串的格式应如下所示

<?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);
你的另一个错误是你的if语句

$array = array('a','s','d','f','g','h','j','k','l');
您需要使用双等号进行比较,单=号用于赋值

您是否也能提供您在这里想要做的事情,因为您的代码有一些即时的格式问题,这可能是a是唯一一个打印的原因。

这里有两个问题:

首先,您在这一行中使用的是=而不是==:

if($k == 4)
第二个是您的逻辑,因为当您的内部循环在同一数组上迭代时,它将重复取消设置$array[1]

这不影响内部的foreach,而是外部的foreach。所以echo一美元;有机会只打印一次

将if语句更改为:

if($k = 4){
假设这就是你要去的地方,就让echo赚了$a

为什么在这个例子中,echo只显示a,而print\r显示全部好

当您在这里修改要迭代的数组时,如果您删除了一个元素,foreach的行为可能会给您带来意想不到的结果。手册页上的注释说明:

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

是否有可能在回音回路中进行良好显示

是的,但这取决于你努力实现的目标。由于您没有具体说明好节目的实际含义,我们只能猜测:

将$array分配给一个新变量,并在foreach中使用该变量。 -或者-不要使用引用&$a和&$b,只使用$a和$b。 -或-保存要删除的元素,并在迭代中跳过这些元素。 -或-。。。 -或-甚至回音良好\m;? 工作代码示例可能如下所示:


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

这意味着什么,在if语句中使用单等号?您想用它实现什么?我看不出第二次循环的原因。未设置操作只执行了一次。这确实重置了$array中的数组指针,从而结束了两个foreach操作。使用unset$b不会重置$array中的数组指针,它只删除一个引用,实际上什么都不做,您还可以建议完全删除内部foreach。只是为了补充说明。或者更好地说:你的回答的后半部分完全错了对不起,没有冒犯,我花了一段时间才弄明白。有道理——我没有深入研究它,只是尝试了一些我想到的事情,并看到了一个有效。看起来我也错了。unset操作按您所说的做,而且不止一次。我测试了它,但现在测试揭示了这一点。呃。我的第一个测试是使用修正的if$k==4,这就是为什么它只执行一次。但这仍然重置了外部循环,因此我们两人在一定程度上都是对的^^^是的,绝对正确。这就是为什么我要问自己——除了我们思考的问题之外——是什么让那个家伙首先编写了这样的代码。另外,在循环中进行良好的显示实际上意味着什么?回音良好\n;?
if($k == 4){
  unset( $b);
}
$array = array('a','s','d','f','g','h','j','k','l');

foreach ($array as $i => &$a) {
    echo "$a\n";
}

print_r($array);