该代码如何变得更短?

时间:2018-08-06 10:05:36

标签: php arrays key-value

我是PHP的新手,我有一个简单的问题。

更新:我正在使用PHP 5.6(最好的解决方案是更新PHP版本,但是假设我只能使用PHP 5.6)

我有如下代码:

function findOrCreateMasterRecord ($masterTableName, $masterName) {

    if (isset($sampleArr[$masterTableName][$masterName])) {
        return $sampleArr[$masterTableName][$masterName];
    }

    return getNewMasterIndex($masterTableName, $masterName);

}

此代码正常工作。但是我想使“ if”块更简单,因为它接近相同索引的两倍($ sampleArr [$ masterTableName] [$ masterName]),我认为这有点.....不好

有没有办法使此功能更有效?

谢谢。

2 个答案:

答案 0 :(得分:3)

PHP 7 + 中,您可以使用 null coalescing operator: ??

function findOrCreateMasterRecord ($masterTableName, $masterName)
{ return $sampleArr[$masterTableName][$masterName] ?? getNewMasterIndex($masterTableName, $masterName); }

如果不是在PHP 7中,则ternary operator可以缩短您的代码,但仍然是多余的:

function findOrCreateMasterRecord ($masterTableName, $masterName)
{ return isset($sampleArr[$masterTableName][$masterName]) ? $sampleArr[$masterTableName][$masterName] : getNewMasterIndex($masterTableName, $masterName); }

使用较短的变量名可以更好地阅读:

// PHP 7
function findOrCreateMasterRecord ($table, $name)
{ return $arr[$table][$name] ?? getNewMasterIndex($table, $name); }

// Under PHP 7
function findOrCreateMasterRecord ($table, $name)
{ return isset($arr[$table][$name]) ? $arr[$table][$name] : getNewMasterIndex($table, $name); }

答案 1 :(得分:0)

您可以减少到以下内容,因为您的条件将永远无法满足:

<?php
function findOrCreateMasterRecord ($masterTableName, $masterName) {
    return getNewMasterIndex($masterTableName, $masterName);
}