2017-01-01 68 views
0

我有一个php数组,我希望使用循环将数组拆分为更小的块。PHP - 根据数组的内容将数组拆分为块

一旦所有具有相同值的元素都被压入块中,我想使用该块来做一些事情,然后继续循环并设置下一个块,直到原始$数组的所有内容都被使用。

public function adjust($array){ 
    // $array = [1, 1, 2, 2, 8, 8, 8, 9, 20] 

    $chunk = array() 

    for ($i = 0; $i < sizeof($array); $i++){ 
    // code here 
    // result should be $chunk = [1, 1] 
    // use $chunk for something, reset its contents, 
    // continue loop until chunk is [2, 2], 
    // rinse and repeat 
}  
} 

我不necesarrily需要一个循环,我只是需要能够切片$array到5 $chunks(对于这个具体的例子),至能够处理数据。

有没有更简单的方法来解决这个没有一堆if/else子句?

+0

你想要这样的东西吗? '[[1,1],[2,2],[8,8,8],[9],[20]]' –

+0

不,这不是必须的。基本上,底部安瓿是好的,但理想情况下,我不想处理循环外的最后一块。谢谢。 – user431806

+0

我觉得用一些库比较容易。你有没有使用过Laravel及其系列?我觉得它太棒了!你可以使用这个项目https://github.com/tightenco/collect在外面和Laravel/Lumen使用它们,你仍然可以使用所有的laravel文档! –

回答

1

$chunk初始化为包含第一个元素的数组。然后遍历数组的其余部分,将当前元素与$chunk中的内容进行比较。如果不同,请处理$chunk并重置。

$chunk = array[$array[0]]; 
for ($i = 1; $i < count($array); $i++) { 
    if ($array[$i] != $chunk[0]) { 
     // use $chunk for something 
     $chunk = array($array[$i]); 
    } else { 
     $chunk[] = $array[$i]; 
    } 
} 
// process the last $chunk here when loop is done 
0

array_count_values更多或可能是你想要的。

$array = [1, 1, 2, 2, 8, 8, 8, 9, 20]; 
foreach (array_count_values($array) as $val => $count) { 
    $chunk = array_fill(0, $count, $val); // contains [1, 1], [2, 2], etc. 
}