【问题标题】:PHP: How to split array into 2 parts?PHP:如何将数组分成两部分?
【发布时间】:2014-10-21 19:36:58
【问题描述】:

我有一个充满数据库记录的数组。它可能有很多元素,也可能很少,它会定期变化。

我需要将数组分成两个相等的部分。原因是我将这些数组传递给 Laravel 视图并将它们显示到单独的列中。

这里是被拉取的数据库记录:

$books = Book::where('unitcode', '=', $unitcode['unitcode'])->get();

如果拉动有效,那么我正在运行:

return View::make('showbooks')
->with('books', $books);

我想要做的是通过$books1$books2 这实际上是$books 分成两部分。

关于如何做到这一点的任何想法?谢谢

【问题讨论】:

  • @scrowler 你能发布一个关于它使用的答案吗?我对此很陌生,并且无法找到数组的长度然后对其进行分块。
  • $books = array_chunk($books, count($books)/2); - 一分为二
  • @scrowler 谢谢!得到另一半会很简单:$books = array_chunk($books, count($books)/2, count($books);
  • $books 将包含一个带有两个键的数组,每个键将包含数组的一半。您也可以使用list($books1, $books2) = array_chunk($books, count($books)/2); 将它们放入变量中
  • 如果你使用 array_chunk 并且它是奇数个元素,它将创建一个包含 3 个数组的数组,而不是 2 个数组,每个数组中都有 +1 个元素。

标签: php arrays laravel


【解决方案1】:

这是一条线:

$halved = array_chunk($books, ceil(count($books)/2));

然后$halved[0] 将包含数组的前半部分。如果数组包含奇数个元素,它将总是大 1 个元素。当然,$halved[1] 将包含数组的第二半。

Here's a working example

【讨论】:

    【解决方案2】:

    我认为这对你有用。

    <?php
        $books = array("a", "b", "c", "d", "e","f"); // assuming books is an array like this
        $count = count($books); // total count of the array books
        $half = $count/2; // half of the total count
        $books1 = array_slice($books, 0, $half);      // returns first half
        $books2 = array_slice($books, $half);  // returns second half
    
        print_r($books1);
        print_r($books2);
    ?>
    

    【讨论】:

    • 如果$books 有奇数个元素,一个元素将被忽略...我会删除$books2 的第二个$half 参数,这样你就可以得到其余的数组从 $books1 结束的位置...
    【解决方案3】:

    我认为您应该使用 count 方法获取数组的长度,然后将项目循环到中间它应该看起来像这样:

    <?php 
        $count = count($books);            //getting the count of $books
        $mid = round($count/2);           //getting the mid point of $books
        for($i = 0; $i < $count ; $i++){ //looping through the indexes
            if($i <= mid - 1){          //Checking the position of $i and adding the value
                $books1[] = $books[$i];
            }else{
                $books2[] = $books[$i];
            }
        }
    ?>
    

    【讨论】:

      【解决方案4】:

      扩展Ohgodwhy的回答:

      由于您使用的是,这里有一个更流畅的方法来实现这一点:

      $books = collect($books);
      
      $halved = $books->split(ceil($books->count()/2))->toArray();
      
      // Result: [[a, b, c], [d, e, f]]
      

      查看 Laravel 的各种 Collection Methods 以了解更多可用的方法来流畅地操作数组。

      【讨论】:

        【解决方案5】:

        用途:

        $collection->chunk(2);
        

        见: https://laravel.com/docs/5.6/collections#method-chunk

        【讨论】:

          猜你喜欢
          • 2011-07-30
          • 2011-11-26
          • 2017-10-24
          • 2017-04-01
          • 2016-07-18
          • 2019-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多