Thursday, 30 August 2018

Create an associative array based on the 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!

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

0 comments:

Post a Comment