递增不存在的数组元素,恕不另行通知

时间:2019-05-04 19:00:56

标签: php arrays increment null-coalescing

我想增加一个可能还不存在的数组的值。

$array = [];
$array['nonExistentYet']++; // Notice

问题

这会导致提示

尝试

我找到了一种方法,但是有点clunky

$array = [];
$array['nonExistentYet'] = ($array['nonExistentYet'] ?? 0) + 1;

问题

是否有更人性化的方式来做到这一点?

5 个答案:

答案 0 :(得分:2)

好吧,我想一种更易读的方式是使用if..else作为

$arr = [];
if(array_key_exists('nonExistentYet', $arr)) {
    $arr['nonExistentYet'] += 1;
}
else {
    $arr['nonExistentYet'] = 1;
}

答案 1 :(得分:2)

如果经常使用此方法,则可以定义一些辅助方法,该方法还具有有趣的副作用...

@GetMapping("/test")
public ResponseEntity<String> getmc() {

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("Authorization", "Bearer " + restTemplate.getAccessToken());

    HttpEntity<Pojo> entity = new HttpEntity<>(null, headers);

    ResponseEntity x = restTemplate.exchange("https://api.x.com/v1/demo", HttpMethod.GET, entity, Pojo.class);

    return ResponseEntity.ok(entity.getId());
}

给予...

function inc(&$element) {
    $element++;
}
$array = [];
inc($array['nonExistentYet']);
print_r($array);

,无警告。 如您所见,该函数将参数定义为Array ( [nonExistentYet] => 1 ) ,如果该值不存在,则将创建它,因此函数调用本身将创建该元素,然后将其递增。

答案 2 :(得分:1)

我对此的标准实现是:

if (isset($array['nonExistentYet']))
   $array['nonExistentYet']++;
else
   $array['nonExistentYet'] = 1;

但这是我使用@运算符抑制警告的极少数情况之一,但前提是我对数组拥有完全控制权:

@$array['nonExistentYet']++;

通常,抑制警告或错误消息不是很好!

答案 3 :(得分:0)

您问的有点含糊, 要么该变量存在并增加它,要么在这种情况下您不创建它。 在另一种情况下,假设您想在for循环中执行此操作,则在这种情况下,您不必担心变量的存在。

答案 4 :(得分:-1)

一种方法是三元运算符,它检查数组值是否存在:

$array['iDoNotExistYet'] = empty($array['iDoNotExistYet']) ? 1 : ++$array['iDoNotExistYet'];

其他人只会将其重写为ifelse条件。