2013-08-29 31 views
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; 
    } 
} 

在此先感谢。

+1

尝试'preg_grep' –

回答

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); 

而且你甚至可以在另一个内部类包装这一点,但也许留给另一次,刚开始坚持功能。

+0

谢谢哈克雷 - 非常感谢。 –