如何切片数组以将其传递给函数。我不能使用unset,因为我需要进一步的数组。我知道我可以将整个数组复制到变量,但是它非常大而且效率不高。我的代码:
$list = array(0=>2123, 2=>1231, 7=>123123,...);
unset($list[0]); //I can't do this because I still need whole $list
$seats = $allocatingClass->allocateSeats($seatsNumber, $list); //here I need to slice $key from $list and pass $list without reiterating
答案 0 :(得分:4)
如果您需要保留索引0,请将其存储,而不是将整个阵列存储在其他位置:
$tmp = $list[0];
然后拼接数组:
$list = array_splice($list,1,count($list));
然后将其传递给您的函数:
$seats = $allocatingClass->allocateSeats($seatsNumber, $list);
然后,当您需要它时,将值放回到数组中:
$list[] = $tmp;
编辑:如果您确实需要将其精确地放在索引0处,那么您可能希望取消设置数组的索引0而不是拼接它。但是,如果你可以在数组末尾推送它,请按照上面的说明进行操作。
要清除,如果您需要将元素推回到索引0,请执行
unset($list[0]);
而不是拼接...
要放回元素,请执行:
$list[0] = $tmp;
答案 1 :(得分:1)
但是你这样做,传递数组时会复制一个副本(除非你通过引用传递它)。
要么使用拼接。或创建副本并移动一个值。
发送复制变量后,您可以取消设置,以便它不会保留其空间。
编辑:
上述解决方案也是可行的。虽然我建议你使用:
$tmp = array_shift($arr);
doStuf($arr);
array_unshift($arr, $tmp);