我经常需要这样的构造:
$data = [];
foreach($input as $entry) {
if(!isset($data[$entry->type])) {
$data[$entry->type] = 0;
}
$data[$entry->type] += $entry->value;
}
我觉得这太难看了,不太好读。有什么想法可以解决这个问题,让它更流畅/更容易阅读/打字更快吗?
我通常不会太在意这种";问题";但我非常需要这些结构,写完后总是有点自惭形秽。
空在这种情况下更合适。
$data = [];
foreach($input as $entry) {
if(empty($data[$entry->type])) {
$data[$entry->type] = 0;
}else{
$data[$entry->type] += $entry->value;
}
}
您也可以使用三元运算符。
$data[$entry->type] = empty($data[$entry->type]) ? 0 : $data[$entry->type] + $entry->value;
更清洁的解决方案使用三元运算符:
$data[$entry->type] = isset($data[$entry->type])?$data[$entry->type] + $entry->value:0;
虽然我猜你的意思不是0作为起始值,而是$entry->value
,如果这是第一次满足这种类型:
$data[$entry->type] = isset($data[$entry->type])?$data[$entry->type] + $entry->value:$entry->value;
您可以a(检查PHP编码标准http://www.php-fig.org/若你们更关心代码的风格,b(若你们更关注效率,那个么使用if/else语句的三元运算符。
$data = [];
foreach($input as $entry)
{
$data[$entry->type] = empty($data[$entry->type]) ? 0 : $data[$entry->type] + $entry->value;
}
这可以在PHP 7.0+中使用空合并运算符完成:
$data = [];
foreach($input as $entry) {
$data[$entry->type] = $entry->value + ($data[$entry->type] ?? 0);
}
$data[$entry->type] ?? 0
返回$data[$entry->type]
的值,如果不存在则返回0。有关更多信息,请参阅RFC