n00*_*101 28 php arrays grouping multidimensional-array
我有一个多维数组,我试图根据特定列中的值对它们进行分组.
我正试图将它们分组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
)
)
Run Code Online (Sandbox Code Playgroud)
我希望生产的东西:
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
)
)
)
Run Code Online (Sandbox Code Playgroud)
Mik*_*ike 39
最好的方法是,如果您可以控制构建初始数组,那么在添加条目时,只需在开始时进行设置即可.
如果没有,那么构建一个临时数组来排序:
foreach ($input_arr as $key => &$entry) {
$level_arr[$entry['level']][$key] = $entry;
}
Run Code Online (Sandbox Code Playgroud)
给你留下你想要的形式和所有引用的东西.
尽管如此,尽可能地构建这样的数组.
Ger*_*sig 10
你需要将它们按级别第一
如果级别与前一项相同,则使用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);
Run Code Online (Sandbox Code Playgroud)
print的输出($ grouparr); 将显示您希望的格式
你也可以尝试
print($grouparr[7]);
Run Code Online (Sandbox Code Playgroud)
会显示
[7] => Array (
[4] => Array (
[cust] => XT7434
[type] => standard
)
)
Run Code Online (Sandbox Code Playgroud)
要么
print($grouparr[3]);
Run Code Online (Sandbox Code Playgroud)
会显示
[3] => Array (
[2] => Array (
[cust] => XT8922
[type] => premier
)
[3] => Array (
[cust] => XT8816
[type] => permier
)
)
Run Code Online (Sandbox Code Playgroud)
小智 6
这是我为同一个问题着陆的解决方案,包装为一个函数:
function arraySort($input,$sortkey){
foreach ($input as $key=>$val) $output[$val[$sortkey]][]=$val;
return $output;
}
Run Code Online (Sandbox Code Playgroud)
要通过名为"level"的键对$ myarray进行排序,请执行以下操作:
$myArray = arraySort($myArray,'level');
Run Code Online (Sandbox Code Playgroud)
或者,如果你不想将它作为一个函数,只是一次性使用,这将从$ myArray创建$ myNewArray,按键"级别"分组
foreach ($myArray as $key=>$val) $myNewArray[$val['level']][]=$val;
Run Code Online (Sandbox Code Playgroud)
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');
Run Code Online (Sandbox Code Playgroud)