如何在不更改原始数组的情况下从数组中删除foreach循环中的当前元素?

时间:2015-08-11 08:32:19

标签: php arrays loops foreach

除了传递给foreach循环的当前元素之外,如何获得包含所有元素的新数组。见下面的例子:

$numbers = [1, 2, 3, 4, 5];
foreach($numbers as $numer){
    // Get a new array with 4 elements excluding the $numer
    // For example for first loop I want a array [2, 3, 4, 5]
}

我尝试过:

foreach($numbers as $i=>$numer) {
    unset($numbers[$i]);
    echo '<pre>';
    var_dump($numbers);
    echo '</pre>';
}

它可以工作,但它会改变原始数组。是否有任何PHP函数来获取新数组而不影响原始数组?

3 个答案:

答案 0 :(得分:2)

$numbers = array(1,2,3,4,5);   
if (($key = array_search($numer, $numbers)) !== false) {
   unset($numbers[$key]);
}

如果您要删除$numer所有实例,只需将if替换为while

编辑:我发现您已将问题更改为包括不更改原始数组。在这种情况下,您可以复制数组并操作复制的数组。

答案 1 :(得分:1)

这应该适合你:

只需使用array_diff_key()来获取整个数组,期望当前元素,例如

<?php

    $numbers = [1, 2, 3, 4, 5];
    foreach($numbers as $key => $numer){
        print_r(array_diff_key($numbers, array_flip([$key])));
    }

?>

修改

如果您没有密钥,只需使用array_keys()即可获取所有密钥,例如

$numbers = [1, 2, 3, 4, 5];
$value = 32;
print_r(array_diff_key($numbers, array_flip(array_keys($numbers, $value))));

答案 2 :(得分:0)

这将有效

<?php
   $numbers = array(1,2,3);
    foreach($numbers as $index => $value){ 
        $temp = $numbers;
        unset($temp[$index]);
        $new_array = $temp;
        echo '<pre>'.print_r($new_array, true).'</pre>';
    }
?>