我有一些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;
}
}
提前致谢。
答案 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);
此外,您可以将其包装在另一个类中,但也许可以将其保留一段时间,然后开始坚持使用函数。