2017-01-01 69 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. 
}