以下の様な配列から、nullを排除し特定のキーとその最小値のみを1つの配列として導き出したいのですが、うまく行かず苦労しています。
php
1var_dump($groups); 2 3 0 => 4 array (size=6) 5 'AAA' => null 6 'BBB' => float 10 7 'DDD' => float 1000 8 'EEE' => null 9 'FFF' => float 100000 10 1 => 11 array (size=4) 12 'AAA' => float 2 13 'CCC' => float 200 14 'DDD' => float 2000 15 'FFF' => null
求めたい配列の加工結果例
php
1 array (size=5) 2 'AAA' => float 2 3 'BBB' => float 10 4 'CCC' => float 200 5 'DDD' => float 1000 6 'FFF' => float 100000
条件
- 配列は例は2つの連想配列だが、3つ以上になるケースがある。
- キーは各配列ごとにまちまちに存在しているが、統一されたキーも出力される
- 統一されたキーがある場合は、各配列の中の同じキーの最小値を入れる
- キー内が全てnullのものは削除
ひとまずやってみましたが、コールバック関数が苦手なので、まず、存在するキー全てを取り出してから foreach をネストしてなんとかしようと思ったのですが、なんともならずです。
php
1 // 複数配列からキーのみを抽出する 2 $keys = []; 3 foreach ($groups as $idx => $array) { 4 var_dump($array); 5 $keys += array_keys($array); 6 } 7 $keys = array_unique($keys); 8 var_dump($keys); 9 10 // 共通キーの最小値を入れる 11 $returnArray = []; 12 $minArray = []; 13 $i = 0; 14 foreach ($groups as $idx => $group) { 15 foreach ($keys as $id) { 16 if (isset($group[$id])) { // null 排除 17 // キーに紐づいた配列を作成し、0より多く前より小さい時だけ入れる? 18 // もしくは配列内の最小値を求める? 19 // この辺で挫折しました。(下の行はエラーになります) 20 // $minArray[$i] += array($id => $group[$id]); 21 22 $value = $group[$id]; 23 $returnArray += array($id => $value); 24 } 25 $i++; 26 } 27 } 28 29
どのような処理を書けば良いでしょうか、
お力を貸していただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。