按字符串或模式搜索数组键

时间:2013-08-29 17:47:48

标签: php regex

我有一些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;
    }
}

提前致谢。

1 个答案:

答案 0 :(得分: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);

此外,您可以将其包装在另一个类中,但也许可以将其保留一段时间,然后开始坚持使用函数。

相关问题