PHP:如何将数组分成两部分?

PHP:如何将数组分成两部分?,php,arrays,laravel,Php,Arrays,Laravel,我有一个满是数据库记录的数组。它可以是成堆的元素,也可以是很少的元素,它会有规律地变化 我需要把数组分成两个相等的部分。原因是我将这些数组传递给一个Laravel视图,并将它们显示到单独的列中 以下是正在提取的DB记录: $books=Book::where('unitcode','=',$unitcode['unitcode'])->get() 如果拉动有效,那么我将运行以下命令: return View::make('showbooks') ->with('books', $books

我有一个满是数据库记录的数组。它可以是成堆的元素,也可以是很少的元素,它会有规律地变化

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

以下是正在提取的DB记录:

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

如果拉动有效,那么我将运行以下命令:

return View::make('showbooks')
->with('books', $books);
我要做的是传递
$books1
$books2
,这实际上是
$books
分为两部分


有什么办法可以帮你吗?谢谢

我想这对你有用

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

这是一个单行程序:

$halved = array_chunk($books, ceil(count($books)/2));
然后,
$halved[0]
将包含数组的前半部分。如果数组包含奇数个元素,则它将始终大1个元素。当然,
$halved[1]
将包含数组的后半部分


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

要详细说明客户的答案:

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

$books = collect($books);

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

// Result: [[a, b, c], [d, e, f]]
查看Laravel的各种方法,以获得更有效的方法来流畅地操作阵列。

使用:

$collection->chunk(2);
见:

@scrowler您能发布一个关于它使用的答案吗?我对这个很陌生,很难找到数组的长度,然后将其分块。
$books=array\u chunk($books,count($books)/2)-将其拆分为half@scrowler谢谢获取另一半是否简单到:
$books=array\u chunk($books,count($books)/2,count($books);
?$books将包含一个带有两个键的数组,每个键将包含数组的一半。您还可以执行
列表($books1,$books2)=array\u chunk($books,count($books)/2)
将它们放入变量如果您使用
数组_chunk
并且它是奇数个元素,它将创建一个包含3个数组的数组,而不是每个数组中包含+1个元素的2个数组。如果
$books
的元素数为奇数,则将保留一个元素…我将删除
的第2个
$half
参数$books2
,这样您就可以从
$books1
结束的位置获取阵列的其余部分。。。