PHP - 根据内容将数组拆分为块

时间:2017-01-01 11:41:21

标签: php arrays

我有一个php数组,我希望使用循环将其分成更小的块。

一旦所有具有相同值的元素被推入块中,我想将该块用于某些东西,然后继续循环并设置下一个块,直到原始$ array的所有内容都被使用。

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
 }    
}

我不需要循环,我只需要能够将$array切片为5 $chunks(对于此特定示例),以便能够处理数据。

如果没有一堆if / else子句,是否有更简单的方法来解决这个问题?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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.
}