2 D配列グループ化アルゴリズム
問題の説明
配列Aは2次元配列であり、groupキーはパケットキーと見なすことができる.
パケットキーに従って変換すると,配列Bのようなデータ構造が得られることが望ましい.
アルゴリズムの考え方
元の配列をトランプと見なすことができ、その中の色はグループキーとして使われています.最初のカードから、新しい色が現れるたびにキューを個別に設定します.そうしないと、現在の色キューに追加されます.これにより、1回の遍歴でグループ化が完了します.
配列Aは2次元配列であり、groupキーはパケットキーと見なすことができる.
// A
$data = array(
array('name'=>'name1','id'=>1,'age'=>'18','group'=>'a'),
array('name'=>'name2','id'=>2,'age'=>'19','group'=>'b'),
array('name'=>'name3','id'=>3,'age'=>'10','group'=>'a'),
array('name'=>'name4','id'=>4,'age'=>'17','group'=>'c'),
);
パケットキーに従って変換すると,配列Bのようなデータ構造が得られることが望ましい.
// B
$result = array(
'a'=>array(
array('name'=>'name1','id'=>1,'age'=>'18','group'=>'a'),
array('name'=>'name3','id'=>3,'age'=>'10','group'=>'a'),
),
'b'=>array(
array('name'=>'name2','id'=>2,'age'=>'19','group'=>'b'),
),
'c'=>array(
array('name'=>'name4','id'=>4,'age'=>'17','group'=>'c'),
)
);
アルゴリズムの考え方
元の配列をトランプと見なすことができ、その中の色はグループキーとして使われています.最初のカードから、新しい色が現れるたびにキューを個別に設定します.そうしないと、現在の色キューに追加されます.これにより、1回の遍歴でグループ化が完了します.
$groupdata = arr_group($data,'group');// B
function arr_group($data,$groupkey){
$result = array();
foreach($data as $vo){
$name = $vo[$groupkey];
if(!isset($result[$name])){
$result[$name] = array();
}
$result[$name][]= $vo;
}
return $result;
}