2017-01-01 7 views
0

ループを使用して分割したい部分に分割したいPHP配列があります。PHP - コンテンツを基にして配列をチャンクに分割する

同じ値を持つすべての要素がチャンクにプッシュされたら、元の$配列のすべてのコンテンツが使用されるまで、そのチャンクを何かに使用してループを続け、次のチャンクを設定します。私はnecesarrilyループを必要といけない

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(この特定の例の場合)$chunks 5にスライスできるようにする必要があります。

if/else節がなくても簡単に解決できますか?

+0

このようなものが欲しいですか? '[[1,1]、[2,2]、[8,8,8]、[9]、[20]] ' –

+0

いいえ、それは必要ありません。基本的に、下のアンカーはOKですが、理想的には私はループ外の最後のチャンクを処理したくありません。ありがとう。 – user431806

+0

私はいくつかのライブラリを使用する方が簡単だと思います。あなたはLaravelとそのコレクションを使ったことがありますか?私はその素晴らしいと思います!あなたはこのプロジェクトを使用して、Laravel/Lumenの外でそれらを使うことができます。https://github.com/tightenco/collect –

答えて

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. 
} 
関連する問題