【问题标题】:how to split the array in to two equal parts using php如何使用php将数组分成两个相等的部分
【发布时间】:2011-07-30 12:52:43
【问题描述】:

如何在 PHP 中使用 array_slice() 将一个数组分成两等份?

这是我的要求:

第一个数组包含:0-1200

第二个数组包含:1200-end

【问题讨论】:

    标签: php arrays slice


    【解决方案1】:

    the documentation for array_slice,你所要做的就是给array_slice一个偏移量和一个长度。

    在你的情况下:

    $firsthalf = array_slice($original, 0, 1200);
    $secondhalf = array_slice($original, 1200);
    

    换句话说,这段代码告诉array_slice

    take the first 1200 records;
    then, take all the records starting at index 1200;
    

    由于索引 1200 是项目 1201,这应该是您需要的。

    【讨论】:

      【解决方案2】:
      $quantity = count($original_collection);
      
      $collection1 = array_slice($original_collection, 0, intval($quantity / 2), true);
      $collection2 = array_diff_key($original_collection, $collection1);
      

      【讨论】:

      • 我知道他指定了数字,但这个选项更好,因为它实际上将任何范围划分为 2,而不仅仅是来自问题所有者的 2400。这回答了这个问题的标题。
      • 那么使用array_slicearray_diff_key 而不是只使用一次array_splice 有什么好处呢?
      【解决方案3】:
      $array1 = array_slice($array, 0, 1199);
      $array2 = array_slice($array, 1200);
      

      【讨论】:

        【解决方案4】:

        我认为array_chunk 会更容易,尤其是因为您不需要知道数组中有多少元素。

        array array_chunk ( array $input , int $size [, bool $preserve_keys = false ] )
        
        <?php
        $input_array = array('a', 'b', 'c', 'd', 'e');
        $size = ceil(count($input_array)/2));
        print_r(array_chunk($input_array, $size));
        print_r(array_chunk($input_array, $size, true));
        ?>
        

        【讨论】:

        • 你的想法是对的,但这会将数组分成许多长度为 2 的数组,而不是将数组分成两半。相反,将 $size 更改为数组长度的一半(使用floor(count($input)/2)),这样结果将是两个包含一半记录的数组。
        • 这是个好主意,但在数组大小为偶数的情况下不起作用。它将数组分成 3 部分:前两个数组大小相等,最后一个数组是单个元素的数组。
        【解决方案5】:
        $array1 = array_slice($input, 0, 1200);
        $array2 = array_slice($input, 1200);
        

        【讨论】:

        • 不应该是0-1201和1201吗?
        • @deceze @webarto 我不这么认为。我已经更新了我认为应该是的答案。首先是take 1200 records,然后是start at record 1200,这是真正的记录1201。
        • @rock OP 想要“记录 0 - 1200”(即 1201 条记录)和“记录 1200 - 结束”(将从偏移量 1201 开始)...我认为 OP 已关闭不过,在那个规范上,所以不用担心。 ;-)
        • @deceze,类似的东西 :)
        【解决方案6】:

        怎么样:

        $array1; // your original array with all records
        $array2 = array_splice($array1, ceil(count($array1)/2));
        
        // or per your requirement of 1200 in the first array:
        $array2 = array_splice($array1, 1200);
        

        这只是从原始数组中弹出后半部分元素并将它们放入第二个数组中。不确定使用 array_slice 两次的好处,就像其他答案提到的那样,除非您想要 2 个新数组并且不希望从原始数组中删除任何元素。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-10-21
          • 1970-01-01
          • 2012-11-20
          • 1970-01-01
          • 2019-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多