除了传递给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函数来获取新数组而不影响原始数组?
答案 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>';
}
?>