假设我有一个数组
$array
任何人都可以给我一个示例,说明如何使用 foreach 循环并在初始数组总数被计数并除以二之后打印两个列表,并将余数留在第二个列表中?
那么,不是只使用 foreach 创建一个长列表,而是创建两个列表?像这样...
然后第二个列表将继续按顺序打印
要获取数组的一部分,可以使用 array_slice:
$input = array("a", "b", "c", "d", "e");
$len = (int) count($input);
$firsthalf = array_slice($input, 0, $len / 2);
$secondhalf = array_slice($input, $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) 来了解偏移量。
这是一个使用 array_chunk 的单行代码:
list($part1, $part2) = array_chunk($array, ceil(count($array) / 2));
如果需要保留键,请添加 true 作为第三个参数:
list($part1, $part2) = array_chunk($array, ceil(count($array) / 2), true);
$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
。 对于数组计数为奇数的情况,程序员通常更喜欢较大的一半先出现。 为了确保这一点,请使用负值作为拼接调用的起始位置参数。 由于 array_splice()
需要整数,因此请使用按位右移运算符与 1
除以 2 并将结果截断为整数。 在我接下来的代码片段中,计数为 5,一半为 2.5,负起始位置为 3——这意味着最后两个元素(索引 3 和 4 处的元素)将从输入数组中删除。
演示:
$array = ["1", "2", "3", "4", "5"];
$removed = array_splice(
$array,
-(count($array) >> 1)
);
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()
当然也合适并且提供了一些便利。 您可以在使用按位右移运算符除以 2 并对结果取整之前无条件地将 ceil()
添加到计数中,而不是在除法后调用 1
进行向上舍入。 演示
var_export(
array_chunk($array, count($array) + 1 >> 1)
)
这对我有用,使第一个数组总是更长一点。我认为这也可能对人们有帮助。
$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"]]