我有一个多维数组,我正在尝试根据特定列中的值对它们进行分组。
我正在尝试按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
)
)
)
答案 0 :(得分:38)
最好的方法是,如果您可以控制构建初始数组,那么在添加条目时,只需在开始时进行设置。
如果没有,则构建一个临时数组进行排序:
foreach ($input_arr as $key => &$entry) {
$level_arr[$entry['level']][$key] = $entry;
}
为您留下您想要的表格以及一起引用的所有内容。
尽可能在第一时间构建这样的数组。
答案 1 :(得分: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);
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
)
)
答案 2 :(得分:7)
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');
答案 3 :(得分:5)
以下是针对相同问题的解决方案,包装为函数:
function arraySort($input,$sortkey){
foreach ($input as $key=>$val) $output[$val[$sortkey]][]=$val;
return $output;
}
要通过名为“level”的键对$ myarray进行排序,请执行以下操作:
$myArray = arraySort($myArray,'level');
或者如果您不想将它作为一个函数,只是一次性使用,这将从$ myArray创建$ myNewArray,按键'level'分组
foreach ($myArray as $key=>$val) $myNewArray[$val['level']][]=$val;
答案 4 :(得分:1)
$result = array();
foreach ($yourArrayList as $data) {
$id = $data['level'];
if (isset($result[$id])) {
$result[$id][] = $data;
} else {
$result[$id] = array($data);
}
}
答案 5 :(得分:0)
最好的答案。
$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);
答案 6 :(得分:-1)
function _group_by($array,$key,$keyName)
{
$return = array();
foreach($array as $val) {
$return[$keyName.$val[$key]][] = $val;
}
return $return;
} //end of function