在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"
}
}
总是将数组设置为值,因为我想当您在代码中使用结果时,这会简化事情。