我如何获取一个数组,将其除以二并创建两个列表?

问题描述 投票:0回答:9

假设我有一个数组

$array

任何人都可以给我一个示例,说明如何使用 foreach 循环并在初始数组总数被计数并除以二之后打印两个列表,并将余数留在第二个列表中?

那么,不是只使用 foreach 创建一个长列表,而是创建两个列表?像这样...

  1. 值 1
  2. 值2
  3. 值3

然后第二个列表将继续按顺序打印

  1. 价值4
  2. 值5
  3. 值6
php arrays
9个回答
105
投票

要获取数组的一部分,可以使用 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);

19
投票

使用

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

14
投票

http://php.net/manual/en/function.array-slice.php

要将数组切成两半,请使用 Floor(count($array)/2) 来了解偏移量。


11
投票

这是一个使用 array_chunk 的单行代码:

list($part1, $part2) = array_chunk($array, ceil(count($array) / 2));

如果需要保留键,请添加 true 作为第三个参数:

list($part1, $part2) = array_chunk($array, ceil(count($array) / 2), true);

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];
}

1
投票

使用 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;

1
投票

array_splice()
是一个本机函数调用,它将根据需要执行。 它可以:

  1. 改变原始数组以包含数据集的前半部分并且
  2. 返回数据集的removed后半部分。

使用这种技术的优点是调用的函数更少,声明的变量也更少。 换句话说,在内存和性能方面都会有经济性。

假设您不知道数组的长度,则需要

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)
)

-1
投票

这对我有用,使第一个数组总是更长一点。我认为这也可能对人们有帮助。

$firsthalf = array_slice($input, 0, $len / 2 +1);
$secondhalf = array_slice($input, $len / 2 +1);

-2
投票

您可以使用 laravel 辅助函数。

$input = array("a", "b", "c", "d", "e", "f");
$collections = collect($input);
$chuncks = $collections->chuck(3) 
$chuncks->toArray(); // [["a", "b", "c"],["d", "e", "f"]]

源:用 php 将数组分成块并按块在新行中显示结果

© www.soinside.com 2019 - 2024. All rights reserved.