基于另一个关联数组的值构建关联数组

4
我正在寻找一种优雅的方法来转换这个数组:
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
$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
我认为这样做就可以了:
foreach ($arr1 as $k => $val) $arr2[$val][] = $k;

其中$arr1是原始数组,输出新数组到$arr2


我认为这会生成一个 PHP 警告,但没有!简洁而甜美胜利! - maček
@stereofrog,你能详细说明一下这个“bug”吗? - maček
1
@stereofrog,我想那是一个合理的论点。你也是对的。为了省略一两行代码而牺牲可靠性功能是不应该的。 - maček
@stereofrog:我敢肯定我在手册页中看到过这种类型的示例。因为如果你所说的是真的,那么我的代码就完全炸了。 - Gutzofter
我从不先定义变量,浪费一行代码。这就是为什么我使用 PHP 的原因,因为你不必这样做。 - animuson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接