Построить ассоциативный массив на основе значений другого ассоциативного массива - PullRequest
4 голосов
/ 21 апреля 2010

Я ищу элегантный способ превратить этот массив:

Array (
  [foo] => 1
  [bar] => 1
  [zim] => 3
  [dib] => 6
  [gir] => 1
  [gaz] => 3
)

В этот массив:

Array (
  [1] => Array ( foo, bar, gir ),
  [3] => Array ( zim, gaz ),
  [6] => Array ( dib )
)

Примечание: , нет никакой связи между ключами или значениями. Они абсолютно произвольны и используются только в качестве примера. Полученный массив должен быть ассоциативным массивом, сгруппированным по значениям входного массива.

Спасибо!

Ответы [ 2 ]

12 голосов
/ 21 апреля 2010
$input = array(
  'foo' => 1,
  'bar' => 1,
  'zim' => 3,
  'dib' => 6,
  'gir' => 1,
  'gaz' => 3
)

$output = array();
foreach ( $input as $k => $v ) {
  if ( !isset($output[$v]) ) {
    $output[$v] = array();
  }

  $output[$v][] = $k;
}
3 голосов
/ 21 апреля 2010

Я думаю, что это будет хорошо:

foreach ($arr1 as $k => $val) $arr2[$val][] = $k;

где $arr1 - исходный массив, выводящий новый массив в $arr2.

...