PHP:在数组中交换所有键及其关联值,并保留即使值有多个不连贯的事件

时间:2016-07-29 07:39:01

标签: php arrays

在PHP中我们有函数array_flip用于在数组中交换所有键及其关联值,但是我在php函数的帮助下寻找解决方案

INPUT

"=====[ On vim load, toggle NERDTree and switch to file ]=====        
if typefile != 'file'

autocmd VimEnter * :NERDTreeToggle | wincmd l

endif

输出

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

3 个答案:

答案 0 :(得分:1)

我认为它没有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
)

答案 1 :(得分:0)

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

foreach ($source as $key => $value)
{
    $result[$value][] = $key;
}

答案 2 :(得分:0)

不要认为存在功能,但你可以通过一些代码实现它:

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

将数组始终设置为值,因为我猜这会在您在代码中使用结果时简化操作。