0

我有一些 PHP,我相信它可以做得更优雅一些。它在功能上有效,所以它更多地只是为了自学。

我有一个具有不同字母键的数组(或对象),我正在寻找是否设置了键,如果是,则返回剩余的匹配项。

我目前拥有的 PHP 代码只是一个基本的 if 语句:

if(isset($item->revision->application_uid)) $item->type = 'application';
elseif(isset($item->revision->channel_uid)) $item->type = 'channel';
elseif(isset($item->revision->workout_uid)) $item->type = 'workout';

所以本质上,我想搜索所有键,并返回“_uid”键的剩余部分。

[编辑] 除此之外,我提出了一个替代建议,但是我仍然想知道是否有更好/更有效的方法来做到这一点。

foreach(array_keys((array) $item->revision) as $key)
{
    if($match = strstr($key, '_uid', TRUE))
    {
        $item->type = $match;
        break;
    }
}

提前致谢。

4

1 回答 1

1

您的代码有点重复,foreach已经提供了密钥,因此您无需调用array_keys

foreach ($item->revision as $key => $value)
{
    if ($match = strstr($key, '_uid', TRUE))
    {
        $item->type = $match;
        break;
    }
}

所以这看起来并没有那么糟糕。也许您想使用一个NULL值或某个默认值进行初始化,以防找不到类型:

$item->type = 'none';

foreach ($item->revision as $key => $value)
{
    if ($match = strstr($key, '_uid', TRUE))
    {
        $item->type = $match;
        break;
    }
}

然后将其包装成它自己的函数:

function findUidKey($item) {

    foreach ($item->revision as $key => $value)
    {
        if ($match = strstr($key, '_uid', TRUE))
        {
            return $match;
        }
    }

    return 'none';        
}

并改为调用该函数:

$item->type = findUidKey($item);

再进一步,您甚至可以将其包装在另一个类中,但也许可以再等一次,开始坚持使用功能。

于 2013-08-29T18:17:51.877 回答