【发布时间】:2026-01-17 23:45:02
【问题描述】:
假设我有一个数组
$array
谁能给我一个例子,说明如何使用 foreach 循环并在初始数组总数被计算并除以 2 后打印两个列表,其余部分留在第二个列表中?
所以不是只使用 foreach 创建一个长列表,而是创建两个列表?就这样……
- 值 1
- 值 2
- 值 3
然后第二个列表会继续按顺序打印
- 价值 4
- 值 5
- 值 6
【问题讨论】:
假设我有一个数组
$array
谁能给我一个例子,说明如何使用 foreach 循环并在初始数组总数被计算并除以 2 后打印两个列表,其余部分留在第二个列表中?
所以不是只使用 foreach 创建一个长列表,而是创建两个列表?就这样……
然后第二个列表会继续按顺序打印
【问题讨论】:
要获取数组的一部分,可以使用array_slice:
$input = array("a", "b", "c", "d", "e");
$len = count($input);
$firsthalf = array_slice($input, 0, $len / 2);
$secondhalf = array_slice($input, $len / 2);
【讨论】:
floor() 和下半场ceil() 怎么样?包含 5 个项目的数组将被拆分如下:2 / 3
round($len/2)。
使用array_chunk 将数组拆分为多个子数组,然后循环遍历每个子数组。
要找出将数组分成两半的块应该有多大,请使用ceil(count($array) / 2)。
<?php
$input_array = array('a', 'b', 'c', 'd', 'e', 'f');
$arrays = array_chunk($input_array, 3);
foreach ($arrays as $array_num => $array) {
echo "Array $array_num:\n";
foreach ($array as $item_num => $item) {
echo " Item $item_num: $item\n";
}
}
输出
Array 0:
Item 0: a
Item 1: b
Item 2: c
Array 1:
Item 0: d
Item 1: e
Item 2: f
【讨论】:
http://php.net/manual/en/function.array-slice.php
要将数组分成两半,请使用 floor(count($array)/2) 来了解您的偏移量。
【讨论】:
floor(count($array)/2) 更适合包含奇数个元素的数组。
这是一个使用 array_chunk 的单行代码:
list($part1, $part2) = array_chunk($array, ceil(count($array) / 2));
如果需要保留键,添加 true 作为第三个参数:
list($part1, $part2) = array_chunk($array, ceil(count($array) / 2), true);
【讨论】:
Warning: array_chunk(): Size parameter expected to be greater than 0 我的代码行是list($array1, $array2) = array_chunk($myarray, ceil(count($myarray) / 2)); 代码工作正常,有时它只会抛出那个错误,你能告诉我可能是什么问题吗?
$limit=count($array);
$first_limit=$limit/2;
for($i=0;$i<$first; $i++)
{
echo $array[$i];
}
foreach ($i=$first; $i< $limit; $i++)
{
echo $array[$i];
}
【讨论】:
使用 foreach 循环可以做到这一点:
$myarray = array("a", "b", "c", "d", "e", "f", "g");
$array1 = array();
$array2 = array();
$i = 1;
foreach ($myarray as $value) {
if ($i <= count($myarray) / 2) {
$array1[] = $value;
} else {
$array2[] = $value;
}
$i++;
}
但使用 array_splice 更容易
$myarray = array("a", "b", "c", "d", "e", "f", "g");
$array1 = array_splice($myarray, 0, floor(count($myarray)/2));
$array2 = $myarray;
【讨论】:
array_splice() 是一个单独的本地函数调用,它将根据需要执行。它可以:
使用这种技术的优点是调用的函数和声明的变量更少。换句话说,在内存和性能方面会很经济。
假设您不知道数组的长度,count() divided by 2 将是必要的。对于数组计数为奇数的情况,通常程序员更喜欢较大的一半在前。为确保这一点,请使用负值作为拼接调用的起始位置参数。因为本机函数需要一个整数(不是浮点数),它会自动截断该值以形成一个整数——这取代了调用额外函数(例如ceil() 或floor())的需要。在我接下来的 sn-p 中,计数是 5,half 是 2.5,负截断起始位置是 2——这意味着最后两个元素将从输入数组中删除。
$array = ["1", "2", "3", "4", "5"];
$removed = array_splice(
$array,
-count($array) / 2
);
var_export([
'first half' => $array,
'second half' => $removed
]);
输出:
array (
'first half' =>
array (
0 => '1',
1 => '2',
2 => '3',
),
'second half' =>
array (
0 => '4',
1 => '5',
),
)
请注意,后半部分数组很方便地重新索引。
array_chunk() 当然也很合适,并提供了一些便利。为避免额外的ceil() 调用,只需将.5 无条件添加到首选块长度即可。
array_chunk($array, count($array) / 2 + .5)
【讨论】:
这对我有用,使第一个数组总是更长一点。认为这也可能对人们有所帮助。
$firsthalf = array_slice($input, 0, $len / 2 +1);
$secondhalf = array_slice($input, $len / 2 +1);
【讨论】:
你可以使用 laravel 辅助函数。
$input = array("a", "b", "c", "d", "e", "f");
$collections = collect($input);
$chuncks = $collections->chuck(3)
$chuncks->toArray(); // [["a", "b", "c"],["d", "e", "f"]]
源:Array into chunks and results by chunks in a new line with php
【讨论】: