我已经“继承”了一些我想要清理的数据。该数组来自一个显然没有密钥的数据库。
数组本身很长,所以我简化了这篇文章的内容......
[0] => Array
(
[id] => 2
[uid] => 130
[eid] => 8
[ename] => Standard
[eaction] => Check
)
[1] => Array
(
[id] => 2
[uid] => 110
[eid] => 8
[ename] => Standard
[eaction] => Check
)
[2] => Array
(
[id] => 2
[uid] => 200
[eid] => 8
[ename] => Standard
[eaction] => Check
)
我正在尝试改变方向,因此数组是多维的,并按照ename进行分组:
[0] => Array
(
[Standard] => Array
(
[id] => 2
[uid] => 130
[eid] => 8
[eaction] => Check
)
)
[0] => Array
(
[Standard] => Array
(
[id] => 2
[uid] => 130
[eid] => 8
[eaction] => Check
)
)
[0] => Array
(
[Standard] => Array
(
[id] => 2
[uid] => 130
[eid] => 8
[eaction] => Check
)
)
任何人都知道如何做这样的事情?
答案 0 :(得分:1)
$outputarray = array();
foreach($inputarray as $value) {
$outputarray[] = array($value['ename'] => $value);
}
会完成你的例子似乎表明的事情(除了你的'结果'例子有多个东西都是关键0的事实......这是无效的。我假设你打算给他们编号0,1 ,2等等)。但是,我不得不怀疑你从中获得了什么好处,因为它似乎正在做的是添加另一个没有用处的维度。如果还有其他事情需要考虑,你或许可以澄清一下你的例子吗?
答案 1 :(得分:1)
您可以使用usort()
按用户定义的函数对数组进行排序。该函数可以比较ename
字段。然后,这只是一个简单的转变。像:
usort($array, 'cmp_ename');
function cmp_ename($a, $b) {
return strcmp($a['ename'], $b['ename']);
}
然后:
$output = array();
foreach ($array as $v) {
$ename = $v['ename'];
unset($v['ename']);
$output[] = array($ename => $v);
}
答案 2 :(得分:0)
$outputarray = array();
foreach($inputarray as &$value) {
$outputarray[][$value['ename']] = $value;
unset($value['ename']);
} unset($value);
答案 3 :(得分:0)
我猜这就是你所要求的:
function array_group_by($input, $field) {
$out = array();
foreach ($input as $row) {
if (!isset($out[$row[$field]])) {
$out[$row[$field]] = array();
}
$out[$row[$field]][] = $row;
}
return $out;
}
用法:
var_dump(array_group_by($input, 'ename'));
答案 4 :(得分:0)
$output = array();
foreach ($YOURARRAY as $value) {
$output[$value['ename']][] = $value;
}
var_dump($output); // to check out what you get