PHP:如果密钥已经存在,则追加到值,如果没有,则添加密钥

2022-08-31 00:17:17

我正在寻找一种在PHP中执行此操作的简洁方法:

给定一个数组,如果我向它添加一对,例程应该检查密钥是否已经存在。key=>value

如果它不存在,则将其添加到数组中。key=>value

如果是这样,则该值应追加到数组的值。因此,例如,如果初始数组是

arr['a']='2e'

当我向数组中添加一对时,例程将返回我'a'=>'45'

arr['a']=array('2e', '45')

当我向它添加另一对时,例程将返回我'a=>gt'

arr['a']=array('2e', '45','gt')

有没有一种简洁的方法可以做到这一点?当然,我可以自己写,但我相信我的解决方案非常丑陋。


答案 1

您可以通过对第一个元素(“2e”)使用数组来解决此问题:

$arr = array();

$arr['a'][] = '2e';
$arr['a'][] = '45';
$arr['a'][] = 'gt';

print_r($arr);

答案 2

有三种情况:

  1. 密钥未定义
  2. 键已定义,但尚未设置为数组
  3. 键已定义,元素为数组。

所以,在代码中:

function appendThings(/* map[string,mixed] */ $array, /* string */ $key, /* string */ $value) {
    if (!isset($array[$key]))
        $array[$key] = $value;
    else if (is_array($array[$key]))
        $array[$key][] = $value;
    else
        $array[$key] = array($array[$key], $value);

    return $array;
}

只有最后一种情况很棘手:如果它还不是数组,则需要使用当前值和新值来组合一个数组。