【问题标题】:How can i take an array, divide it by two and create two lists?我如何获取一个数组,将其除以二并创建两个列表?
【发布时间】:2026-01-17 23:45:02
【问题描述】:

假设我有一个数组

$array

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

所以不是只使用 foreach 创建一个长列表,而是创建两个列表?就这样……

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

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

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

【问题讨论】:

    标签: php arrays


    【解决方案1】:

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

    【讨论】:

    • 感谢这个例子,看起来最同意你的看法!
    • 原始海报想要在后半部分添加额外元素,但如果您想要在前半部分添加额外元素,请在有 $len / 2 的两个地方使用 round($len / 2)。
    • @DustinGraham 上半场floor() 和下半场ceil() 怎么样?包含 5 个项目的数组将被拆分如下:2 / 3
    • @Fleuv:您的场景下包含 5 个项目的数组将拆分为 1,2 和 4,5。中间项目将被排除在外。巧合的是,这正是我想要的,所以谢谢!
    • 要忽略中间元素,请仅在后半部分使用round($len/2)
    【解决方案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
    

    【讨论】:

    • 感谢您将其放入 foreach 等,尽管大多数人都建议使用 array_slice..
    • 应该是 ceil(count($array) / 2),而不是 ciel。只是一个小帮手。
    【解决方案3】:

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

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

    【讨论】:

    • floor(count($array)/2) 更适合包含奇数个元素的数组。
    • 是的,补充说原来的答案。
    【解决方案4】:

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

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

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

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

    【讨论】:

    • 嗨@James 谢谢你的解决方案,我想出了你的解决方案,它工作正常,但有时我得到Warning: array_chunk(): Size parameter expected to be greater than 0 我的代码行是list($array1, $array2) = array_chunk($myarray, ceil(count($myarray) / 2)); 代码工作正常,有时它只会抛出那个错误,你能告诉我可能是什么问题吗?
    【解决方案5】:
    $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];
    }
    

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

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

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

        假设您不知道数组的长度,count() divided by 2 将是必要的。对于数组计数为奇数的情况,通常程序员更喜欢较大的一半在前。为确保这一点,请使用负值作为拼接调用的起始位置参数。因为本机函数需要一个整数(不是浮点数),它会自动截断该值以形成一个整数——这取代了调用额外函数(例如ceil()floor())的需要。在我接下来的 sn-p 中,计数是 5,half 是 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)
        

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

            【解决方案9】:

            你可以使用 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

            【讨论】:

              最近更新 更多