php-重新创建数组?
我“继承”了一些数据,我正试图清理这些数据。该数组来自一个显然没有密钥的数据库 数组本身很长,所以我在为这篇文章简化一些东西php-重新创建数组?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我“继承”了一些数据,我正试图清理这些数据。该数组来自一个显然没有密钥的数据库 数组本身很长,所以我在为这篇文章简化一些东西 [0] => Array ( [id] => 2 [uid] => 130 [eid] => 8 [ename] => Standard [eaction] => Check ) [1]
[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
)
)
有人知道怎么做这样的事吗
$outputarray = array();
foreach($inputarray as $value) {
$outputarray[] = array($value['ename'] => $value);
}
将完成您的示例所显示的内容(除了您的“结果”示例有多个都带有0键的内容,这是无效的。我假设您打算将它们编号为0,1,2等等)。然而,我想知道你从中得到了什么好处,因为它所做的一切似乎只是添加了另一个毫无意义的维度。如果还有其他需要考虑的事情,也许您可以澄清一下您的示例?您可以使用用户定义的函数对数组进行排序。该函数可以比较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);
}
我猜这就是你想要的:
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'));
菲弗罗是对的,但他也有点不对劲。在他的代码中,每当您遇到一个数组元素的['ename']与您已经使用过的相同时,它都会用相同的['ename']覆盖上一个元素中的数据 您可能希望执行以下操作:
$output = array();
foreach ($YOURARRAY as $value) {
$output[$value['ename']][] = $value;
}
var_dump($output); // to check out what you get
你能进一步解释一下吗?什么是“标准”以及何时有更多的标准?您想知道如何将当前阵列转换为新阵列,还是只创建新阵列?您的第二个示例没有真正意义。ID是重复的(全部为0),我不会将其描述为多维的。请澄清。
$output = array();
foreach ($YOURARRAY as $value) {
$output[$value['ename']][] = $value;
}
var_dump($output); // to check out what you get