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