多次元配列があり、特定の列の値に従ってグループ化しようとしています。
level
でグループ化しようとしていますが、実際のレベルは事前にはわかりません。つまり、for
ループに入れてwhile $i < 7
と言うことができるわけではありません。7
がレベルキーの最大値であることを知らないためです。私がそうしたとしても、それが私がそれをする必要がある方法であるかどうかわかりません...
Array (
[0] => Array (
[cust] => XT8900
[type] => standard
[level] => 1
)
[1] => Array (
[cust] => XT8944
[type] => standard
[level] => 1
)
[2] => Array (
[cust] => XT8922
[type] => premier
[level] => 3
)
[3] => Array (
[cust] => XT8816
[type] => permier
[level] => 3
)
[4] => Array (
[cust] => XT7434
[type] => standard
[level] => 7
)
)
私が作りたいもの:
Array (
[1] => Array (
[0] => Array (
[cust] => XT8900
[type] => standard
)
[1] => Array (
[cust] => XT8944
[type] => standard
)
)
[3] => Array (
[2] => Array (
[cust] => XT8922
[type] => premier
)
[3] => Array (
[cust] => XT8816
[type] => permier
)
)
[7] => Array (
[4] => Array (
[cust] => XT7434
[type] => standard
)
)
)
まずレベルでグループ化する必要があります
foreachを使用して配列レベルにループし、レベルが前のアイテムと同じかどうかを確認してから、その配列でグループ化します
$templevel=0;
$newkey=0;
$grouparr[$templevel]="";
foreach ($items as $key => $val) {
if ($templevel==$val['level']){
$grouparr[$templevel][$newkey]=$val;
} else {
$grouparr[$val['level']][$newkey]=$val;
}
$newkey++;
}
print($grouparr);
print($ grouparr);の出力は、希望する形式のように表示されます
あなたもしようとすることができます
print($grouparr[7]);
表示されます
[7] => Array (
[4] => Array (
[cust] => XT7434
[type] => standard
)
)
または
print($grouparr[3]);
表示されます
[3] => Array (
[2] => Array (
[cust] => XT8922
[type] => premier
)
[3] => Array (
[cust] => XT8816
[type] => permier
)
)
最善の方法は、初期配列の作成を制御できる場合は、エントリを追加するときに、最初にそのように設定するだけです。
そうでない場合は、一時配列を作成してソートします。
foreach ($input_arr as $key => &$entry) {
$level_arr[$entry['level']][$key] = $entry;
}
必要なフォームとすべてのリファレンスを一緒に参照できます。
可能であれば、そもそもそのような配列を構築します。
function group_assoc($array, $key) {
$return = array();
foreach($array as $v) {
$return[$v[$key]][] = $v;
}
return $return;
}
//Group the requests by their account_id
$account_requests = group_assoc($requests, 'account_id');
これは、関数としてラップされた、同じ問題の解決策です。
function arraySort($input,$sortkey){
foreach ($input as $key=>$val) $output[$val[$sortkey]][]=$val;
return $output;
}
$ myarrayを「レベル」というキーでソートするには、次のようにします。
$myArray = arraySort($myArray,'level');
または、関数として使用したくない場合は、一度だけ使用すると、キー 'level'でグループ化された$ myArrayから$ myNewArrayが作成されます
foreach ($myArray as $key=>$val) $myNewArray[$val['level']][]=$val;
最高の回答。
$levels = array_unique(array_column($records, 'level'));
$data = array();
foreach($records as $key => $value){
$data[$levels[array_search($value['level'],$levels )]][] = $value ;
}
print_r($data);
$result = array();
foreach ($yourArrayList as $data) {
$id = $data['level'];
if (isset($result[$id])) {
$result[$id][] = $data;
} else {
$result[$id] = array($data);
}
}