maček
maček

Reputation: 77778

Build associative array based on values of another associative array

I'm looking for an elegant way to turn this array:

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

Into this array:

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

Note:, there is no relationship between the keys or values. They are completely arbitrary and used as examples only. The resulting array should be an associative array grouped by the values of the input array.

Thanks!

Upvotes: 4

Views: 574

Answers (2)

animuson
animuson

Reputation: 54719

I think this will do it just fine:

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

where $arr1 is the original array outputting the new array to $arr2.

Upvotes: 3

hsz
hsz

Reputation: 152206

$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;
}

Upvotes: 12

Related Questions