初始化php数组的干净方法



我经常需要这样的构造:

$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

最新更新