没有选定索引的PHP传递数组

没有选定索引的PHP传递数组,php,arrays,Php,Arrays,如何切片数组以将其传递给函数。我不能使用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($seat

如何切片数组以将其传递给函数。我不能使用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,请将其存储,而不是将整个数组存储在其他位置:

$tmp = $list[0];
然后拼接阵列:

$list = array_splice($list,1,count($list));
$list[] = $tmp;
然后将其传递给您的函数:

$seats = $allocatingClass->allocateSeats($seatsNumber, $list);
然后,在需要时,将值放回数组:

$list = array_splice($list,1,count($list));
$list[] = $tmp;

编辑:如果您确实需要将其精确放置在索引0处,那么您可能希望取消设置数组的索引0,而不是将其拼接。但是,如果您可以将它推到数组的末尾,只需按照上面所写的操作即可

要清除,如果以后需要将元素向后推到索引0,请执行以下操作

unset($list[0]);
而不是拼接

要放回元素,请执行以下操作:

$list[0] = $tmp;

如果需要保留索引0,请将其存储,而不是将整个数组存储在其他位置:

$tmp = $list[0];
然后拼接阵列:

$list = array_splice($list,1,count($list));
$list[] = $tmp;
然后将其传递给您的函数:

$seats = $allocatingClass->allocateSeats($seatsNumber, $list);
然后,在需要时,将值放回数组:

$list = array_splice($list,1,count($list));
$list[] = $tmp;

编辑:如果您确实需要将其精确放置在索引0处,那么您可能希望取消设置数组的索引0,而不是将其拼接。但是,如果您可以将它推到数组的末尾,只需按照上面所写的操作即可

要清除,如果以后需要将元素向后推到索引0,请执行以下操作

unset($list[0]);
而不是拼接

要放回元素,请执行以下操作:

$list[0] = $tmp;

无论如何,在传递数组时都会生成一个副本(除非通过引用传递)

要么使用拼接。或者创建一个副本并移动一个值

发送copy变量后,可以取消设置该变量,使其不会保留其空间

编辑:

上述解决方案也是可行的。尽管我建议您使用:

$tmp = array_shift($arr);
doStuf($arr);
array_unshift($arr, $tmp);

无论如何,在传递数组时都会生成一个副本(除非通过引用传递)

要么使用拼接。或者创建一个副本并移动一个值

发送copy变量后,可以取消设置该变量,使其不会保留其空间

编辑:

上述解决方案也是可行的。尽管我建议您使用:

$tmp = array_shift($arr);
doStuf($arr);
array_unshift($arr, $tmp);

也许你想把它拼接起来。此外,如果需要保留索引0,只需将其存储在某个位置,如$tmp=$list[0]。然后拼接阵列,执行所需操作并将temp变量推回阵列,而不是将整个阵列存储在其他位置:)您应该将其添加为问题的答案。当我不完全了解问题所在时,我想先发表评论:P@briosheje是的:)我知道我需要切片或拼接,但我想问有经验的程序员如何做到这一点。我有以下问题:1。大数组,我不想复制它。2.我不知道如何使用splice来传递数组(没有选定的键,并且具有相同的键)作为函数的参数。也许您想拼接它。此外,如果需要保留索引0,只需将其存储在某个位置,如$tmp=$list[0]。然后拼接阵列,执行所需操作并将temp变量推回阵列,而不是将整个阵列存储在其他位置:)您应该将其添加为问题的答案。当我不完全了解问题所在时,我想先发表评论:P@briosheje是的:)我知道我需要切片或拼接,但我想问有经验的程序员如何做到这一点。我有以下问题:1。大数组,我不想复制它。2.我不知道如何使用splice来传递数组(没有选定的键并且具有相同的键)作为函数附加问题的参数:)我需要在拼接之前按键对数组进行排序?@user2972127:根据您要做的事情,您可能需要对其进行排序。如果您不想在拼接后重新排序,只需存储值,取消设置要取消设置的索引,然后将其推回到未设置的索引:)@user2972127:yep,很抱歉编辑迟到,我正在测试所有操作是否正常:]抱歉,但我没有PHP方面的经验。在我看来,这是相当肮脏的做$tmp。我想PHP可以切片并返回数组:)附加问题:)我需要在拼接之前按键对数组进行排序?@user2972127:根据您想要做的事情,您可能需要对其进行排序。如果您不想在拼接后重新排序,只需存储值,取消设置要取消设置的索引,然后将其推回到未设置的索引:)@user2972127:yep,很抱歉编辑迟到,我正在测试所有操作是否正常:]抱歉,但我没有PHP方面的经验。在我看来,这是相当肮脏的做$tmp。我认为PHP可以切片并返回数组:)是的,我同意,但3个副本>2个副本;)还是一样,我认为PHP可以在没有$tmp的情况下完成,比如doStuf(array\u slice\u key($arr,0))是的,我同意,但是3个副本>2个副本;)尽管如此,我还是认为PHP可以在没有$tmp的情况下完成它,比如doStuf(array\u slice\u key($arr,0))