我经常需要这样的结构:
$data = [];
foreach($input as $entry) {
if(!isset($data[$entry->type])) {
$data[$entry->type] = 0;
}
$data[$entry->type] += $entry-value;
}
我认为这非常难看并且不易阅读。任何想法如何解决这个问题,使其更流畅/更容易阅读/更快地输入?
我通常不太关心这些"问题"但是我需要这些结构很多,写完之后总是对自己感到羞耻。
答案 0 :(得分:0)
empty会更合适。
$data[$entry->type] = empty($data[$entry->type]) ? 0 : $data[$entry->type] + $entry->value;
您也可以使用三元运算符。
{{1}}
答案 1 :(得分:0)
更清洁的解决方案是使用三元运算符:
$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;
答案 2 :(得分:0)
如果您更关心代码的样式,您可以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;
}
答案 3 :(得分:0)
使用null合并运算符可以在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。有关详细信息,请参阅the RFC