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

时间:2011-03-22 14:45:06

标签: php arrays

说我有一个数组

$array

有没有人能给我一个例子,说明如何使用foreach循环并在计算初始数组总数并将其除以2之后打印两个列表,其余的剩余部分留在第二个列表中?

因此,不是仅使用foreach创建一个长列表,而是创建两个列表?像这样...

  1. 价值1
  2. 价值2
  3. 价值3
  4. 然后第二个列表将继续按顺序打印

    1. 价值4
    2. 价值5
    3. 价值6

9 个答案:

答案 0 :(得分:71)

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

答案 1 :(得分:15)

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

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

答案 2 :(得分:14)

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

答案 3 :(得分: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];
}

答案 4 :(得分: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;

答案 5 :(得分:1)

这里是使用array_chunk的单线:

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

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

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

答案 6 :(得分:0)

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

  1. 将原始数组更改为包含数据集的前半部分和
  2. 返回数据集的已删除的后半部分。

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

假设您不知道数组的长度,则count() divided by 2是必要的。对于数组计数为奇数的情况,通常程序员首选较大的一半为第一。为确保这一点,请使用负值作为接头调用的起始位置参数。由于本机函数需要一个整数(而不是浮点数),因此它将自动截断该值以形成一个整数-这取代了调用额外函数(例如ceil()floor()的需要)的麻烦。在我的代码段中,计数为5,一半为2.5,负截断的起始位置为2-这意味着最后两个元素将从输入数组中删除。

一个demonstration

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

答案 7 :(得分:-1)

这对我的工作使得第一个阵列总是更长一点。认为这也可能对人们有所帮助。

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

答案 8 :(得分:-1)

这是一个分页问题。 您可以认为pagesize = 2。