PHP:在一个数组中交换所有键及其关联值,即使值有多个相同的出现,也保留这些键


PHP: exchange all keys with their associated values in an array and preserving even if value has several indentical occurrences

在PHP中,我们确实有函数array_flicp,用于交换数组中所有键及其关联值,但我正在寻找一个借助PHP函数的解决方案,如下所示

输入

array(
    "a" => 1, 
    "b" => 1, 
    "c" => 2
);

输出

array(
        1 => array("a", "b"), 
        2 => "c"
);

我认为它没有php函数,所以您必须自己编写。如果你真的想要嵌套数组和值的混合,那么方法是:

function my_array_flip($arr)
{
    $new_arr = array();
    foreach ($arr as $k => $v)
    {
        if (array_key_exists($v, $new_arr))
        {
            if (is_array($new_arr[$v]))
            {
                $new_arr[] = $k;
            }
            else
            {
                $new_arr[$v] = array($new_arr[$v]);
                $new_arr[$v][] = $k;
            }
        }
        else
        {
            $new_arr[$v] = $k;
        }
    }
    return $new_arr;
}

对于您的阵列,这将返回:

Array
(
    [1] => Array
        (
            [0] => a
            [1] => b
        )
    [2] => c
)
$source = array(
    "a" => 1, 
    "b" => 1, 
    "c" => 2
);
foreach ($source as $key => $value)
{
    $result[$value][] = $key;
}

不认为有这样的函数,但你可以用一些代码来实现它:

$input = [
    "a" => 1,
    "b" => 1,
    "c" => 2,
];
$grouped = [];
foreach ($input as $key => $group) {
    $grouped[$group][] = $key;
}

结果:

var_dump($grouped);
array(2) {
  [1] =>
  array(2) {
    [0] =>
    string(1) "a"
    [1] =>
    string(1) "b"
  }
  [2] =>
  array(1) {
    [0] =>
    string(1) "c"
  }
}

总是将数组设置为值,因为我想当您在代码中使用结果时,这会简化事情。