清理初始化php数组的方法

时间:2016-08-06 09:33:27

标签: php

我经常需要这样的结构:

$data = [];
foreach($input as $entry) {
    if(!isset($data[$entry->type])) {
        $data[$entry->type] = 0;
    }
    $data[$entry->type] += $entry-value;
}

我认为这非常难看并且不易阅读。任何想法如何解决这个问题,使其更流畅/更容易阅读/更快地输入?

我通常不太关心这些"问题"但是我需要这些结构很多,写完之后总是对自己感到羞耻。

4 个答案:

答案 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