如何使用PHP将数组分成两个相等的部分

8

如何使用PHP中的array_slice()函数将数组分成两个相等的部分?

我的要求:

第一个数组包含:0-1200

第二个数组包含:1200-结尾

6个回答

13
$quantity = count($original_collection);

$collection1 = array_slice($original_collection, 0, intval($quantity / 2), true);
$collection2 = array_diff_key($original_collection, $collection1);

我知道他指定了数字,但这个选项更好,因为它实际上将任何范围分成两部分,而不仅仅是问题所有者的2400。这回答了这个问题的标题。 - renevdkooi
那么使用array_slicearray_diff_key的优势是什么,而不是只使用一次array_splice呢? - Chris

13
array_slice的文档中可以看出,你只需要给array_slice提供一个偏移量和一个长度。
在你的情况下:
$firsthalf = array_slice($original, 0, 1200);
$secondhalf = array_slice($original, 1200);

换句话说,这段代码告诉array_slice
take the first 1200 records;
then, take all the records starting at index 1200;

由于索引1200是项目1201,所以这应该是你所需要的。

7
$array1 = array_slice($array, 0, 1199);
$array2 = array_slice($array, 1200);

7
我认为array_chunk会更容易,特别是因为您不需要知道数组中有多少元素。
array array_chunk ( array $input , int $size [, bool $preserve_keys = false ] )

<?php
$input_array = array('a', 'b', 'c', 'd', 'e');
$size = ceil(count($input_array)/2));
print_r(array_chunk($input_array, $size));
print_r(array_chunk($input_array, $size, true));
?>

你的想法是正确的,但这会将数组分成许多长度为2的数组,而不是将数组分成两半。相反,将$size更改为数组长度的一半(使用floor(count($input)/2)),这样结果将是包含一半记录的两个数组。 - maiorano84
这是一个好主意,但在数组大小为偶数的情况下不起作用。它将把数组分成三个部分:前两个数组将具有相等的大小,最后一个数组将只包含单个元素。 - zur4ik

5
$array1 = array_slice($input, 0, 1200);
$array2 = array_slice($input, 1200);

这不应该是0-1201和1201吗? - deceze
@deceze @webarto 我不这么认为。我已经更新了我的答案,以反映我认为应该的情况。首先,“取1200条记录”,然后“从第1200条记录开始”,实际上是第1201条记录。 - rockerest
@rock OP希望"记录0-1200"(共1201条记录)和"记录1200-结尾"(从偏移量1201开始)......不过我认为OP在规格上有些问题,所以不用担心。;-) - deceze
@deceze,类似这样的 :) - Dejan Marjanović

0
怎么样:
$array1; // your original array with all records
$array2 = array_splice($array1, ceil(count($array1)/2));

// or per your requirement of 1200 in the first array:
$array2 = array_splice($array1, 1200);

这只是从原始数组中弹出第二半部分元素并将它们放入第二个数组中。不确定使用array_slice两次的优点,就像其他答案提到的那样,除非您想要2个新数组并且不想从原始数组中删除任何元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接