我想增加一个可能还不存在的数组的值。
$array = [];
$array['nonExistentYet']++; // Notice
问题
这会导致提示。
尝试
我找到了一种方法,但是有点clunky:
$array = [];
$array['nonExistentYet'] = ($array['nonExistentYet'] ?? 0) + 1;
问题
是否有更人性化的方式来做到这一点?
答案 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'];
其他人只会将其重写为if
和else
条件。