php - воссоздать массив? - PullRequest
       16

php - воссоздать массив?

1 голос
/ 23 декабря 2009

Я «унаследовал» некоторые данные, которые я пытаюсь очистить. Массив из базы данных, которая, по-видимому, не имела ключей

Сам массив довольно длинный, поэтому я упрощаю вещи для этого поста ...

[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
             ) 
        )

Кто-нибудь знает, как сделать что-то подобное?

Ответы [ 5 ]

1 голос
/ 23 декабря 2009

Вы можете использовать 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);
}
1 голос
/ 23 декабря 2009
$outputarray = array();

foreach($inputarray as $value) {
  $outputarray[] = array($value['ename'] => $value);
}

выполнит то, что, по-видимому, показывают ваши примеры (кроме того факта, что в вашем «результате» есть несколько вещей с ключом 0 ... что неверно. Я предполагаю, что вы имели в виду их 0,1) , 2 и так далее). Однако мне интересно, какую выгоду вы получите от этого, так как все, что он, похоже, делает, - это добавляет другое измерение, которое не имеет смысла. Возможно, вы могли бы уточнить свой пример, если есть другие вещи, которые следует принимать во внимание?

0 голосов
/ 24 декабря 2009

Филфрео был прав, но он тоже был немного не в себе. с его кодом каждый раз, когда вы встречаете элемент массива с ['ename'], такой же, как тот, который вы уже прошли, он будет перезаписывать данные из предыдущего элемента с тем же ['ename']

вы можете захотеть сделать что-то вроде этого:

$output = array();
foreach ($YOURARRAY as $value) {
    $output[$value['ename']][] = $value;
}
var_dump($output); // to check out what you get
0 голосов
/ 23 декабря 2009

Я предполагаю, что это то, что вы просите:

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'));
0 голосов
/ 23 декабря 2009
$outputarray = array();

foreach($inputarray as &$value) {
  $outputarray[][$value['ename']] = $value;
  unset($value['ename']);
} unset($value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...