如果在关联数组中没有找到键,则添加该键

3

给定一个像这样的PHP关联数组:

$a = array(
    'color' => 'red',
    'taste' => 'sweet',
    'shape' => 'round',
    'name'  => 'apple'
);

我想要搜索一个键,如果找不到,我想要添加'myKey'=>0。哪种方法最好实现这个功能?

5个回答

24
您正在寻找array_key_exists函数:
if (!array_key_exists($key, $arr)) {
    $arr[$key] = 0;
}

6

如果你确定你的键不可能为空,那么你有两种方法可以选择,一种是使用ISSET()函数。

if(!isset($a['keychecked'])){
    $a['keychecked'] = 0;
}

但是,如果你的数组中有NULL值,你必须使用array_key_exists()函数。虽然这个函数要写得更长一些,但不会受到isset(NULL) == false规则的影响。

if(!array_key_exists('keychecked', $a)){
    $a['keychecked'] = 0;
}

3
if( !isset($a['myKey'])) $a['mkKey'] = 0;

或者

$a['myKey'] = $a['myKey'] ? $a['myKey'] : 0;

或者

$a['myKey'] = (int) $a['myKey']; // because null as an int is 0

你的代码可能会潜在地显示E_NOTICE错误,如果可以避免最好不要这样做。 - user142162
1
不,如果error_reporting没有将它们排除在外,它会抛出E_NOTICE - Niet the Dark Absol
话虽如此,如果 myKey 被设置为空字符串之类的值,可能会出现问题...看起来第一个选项是最好的,除非你特别清楚可能出现的情况。 - Niet the Dark Absol

2
<?php
$a = array( 'color' => 'red',
        'taste' => 'sweet',
        'shape' => 'round',
        'name'  => 'apple');
$key = 'myKey';
if (!array_key_exists($key, $a)) {
    $a[$key] = 0;
}
?>

1

如果您不存储null值,可以使用null coalesce运算符:

$a['myKey'] ??= 0;

请注意,如果键 myKey 已经存在且其值为 null,则上述语句将覆盖该值。

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