如何跳过foreach里面的foreach迭代

时间:2015-05-11 16:32:37

标签: php foreach

我有一个值数组,我想将值插入到另一个数组但是使用if条件,如果“if”为true,我想跳过迭代。

代码:

$array=array(array(1=>11,2=>22,3=>23,4=>44,5=>55));
$insert=array();
foreach($array as $k1=>$v1)
{
foreach($v1 as $k2=>$v2)
{
    if($v2==23)
    {
        break; 
    }
}
    $insert[]=$v1;
}

最终结果应该是那样的

Array
(
[0] => Array
    (
        [1] => 11
        [2] => 22
        [3] => 44
        [4] => 55
    )
)   

我尝试过使用:break,return,continue ......

由于

3 个答案:

答案 0 :(得分:2)

你为什么不这样试试?

foreach($v1 as $k2=>$v2)
{
    if($v2!=23)
    {
      $insert[]=$v2;
    }
}

编辑: 说明:如果变量$v2的值不等于(即!=符号)任何给定的数字代表不等式运算符,则使用if($ v2!= 23)进行检查如果是这样,它会将该值插入数组$insert

我希望现在很清楚。

抱歉,我写的是$ v1而不是$ v2,代码应该可以正常使用。

答案 1 :(得分:2)

有几种方法可以做到这一点。您可以遍历外部数组并使用内部数组上的array_filter来删除值23的位置(IMO首选;这也使用$dontWant数字的数组,因此它是以后更容易添加或更改数字):

<?php
$array = array(array(1=>11,2=>22,3=>23,4=>44,5=>55));
$insert = array();

//array of numbers you don't want
$dontWant = array(23);

//loop over outer array    
foreach($array as $subArray){
    //add to $insert a filtered array
    //subArray is filtered to remove where value is in $dontWant
    $insert[] = array_filter($subArray, function($val) uses ($dontWant) {
        //returns true if the value is not in the array of numbers we dont want
        return !in_array($val, $dontWant);
    });
}
//display final array    
echo '<pre>'.print_r($insert,1).'</pre>';

或者您可以引用第一个键添加到$insert中的子数组(这更像是您的代码尝试做的事情,并表明您并不太远):

<?php
$array = array(array(1=>11,2=>22,3=>23,4=>44,5=>55));
$insert = array();
//loop over outer array    
foreach($array as $k1=>$v1){
    //add an empty array to $insert
    $insert[$k1] = array();

    //loop over inner array
    foreach($v1 as $k2=>$v2){
        //if the inner array value is not 23
        if($v2 != 23){
            //add to inner array in insert
            $insert[$k1][] = $v2;
        }
    }
}
//display the result    
echo '<pre>'.print_r($insert,1).'</pre>';

这两种方法都会产生相同的结果。使用array_filter的IMO是首选方法,但对于刚接触编程的人来说,第二种方法可能更容易理解。

答案 2 :(得分:1)

添加变种:)

$array=array(array(1=>11,2=>22,3=>23,4=>44,5=>55));
$insert=array();

foreach($array as $a)
{
    while (($i = array_search(23, $a)) !== false) 
        { unset($a[$i]); sort($a); }
    $insert[] = $a;
}   
print_r($a);

结果:

Array ( [0] => Array ( [0] => 11 [1] => 22 [2] => 44 [3] => 55 ) )