我有一个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子句,是否有更简单的方法来解决这个问题?
答案 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.
}