PHP:如何将数组拆分为2个部分?

时间:2014-08-28 03:42:33

标签: php arrays laravel

我有一个充满DB记录的数组。它可能是很多元素或很少,它会定期更改。

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

以下是提取的数据库记录:

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

如果拉动工作,那么我正在运行:

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

我想要做的是将$books1$books2传递给实际$books分为两部分。

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

5 个答案:

答案 0 :(得分:15)

这是一个班轮:

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

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

Here's a working example

答案 1 :(得分:1)

我认为这对你有用。

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

答案 2 :(得分:0)

我认为您应该使用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];
        }
    }
?>

答案 3 :(得分:0)

扩展Ohgodwhy的答案:

由于您正在使用,因此可以采用更流畅的方式实现此目标:

$books = collect($books);

$halved = $books->split(ceil($books->count()/2))->toArray();

// Result: [[a, b, c], [d, e, f]]

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

答案 4 :(得分:0)

使用:

$collection->chunk(2);

请参阅: https://laravel.com/docs/5.6/collections#method-chunk