2012-02-05 46 views
1

我目前做这个检查,有没有一种更简单的方法来确保数组中的值等于某些php?

if($user['medicineStudy'] == 1 || $user['thievingStudy'] == 1 || $user['miningStudy'] == 1 || $user['barterStudy'] == 1 || $user['craftingStudy'] == 1 || $user['smithingStudy'] == 1) 

但我添加值我必须手动输入他们,有没有一种方法来搜索所有的值,并找出他们是否等于1?数组中有很多其他信息,但是我想检查的值总是以Study结尾?

回答

5
$found = false; 

foreach ($user as $key => $val) { 
    if ($val == 1 && substr($key, -5) == 'Study') { 
     $found = true; 
     echo "Found a one in ".$key; 
     break; 
    } 
} 

if ($found) { 
// do something 
} 

演示:http://codepad.org/c7WehD96

+0

哈......你打我吧:) – 2012-02-05 12:14:53

+0

@ sgermain06对不起,我不明白。你的意思是我的速度更快吗? – TimWolla 2012-02-05 12:18:24

+0

哈哈!是的,你比我更快地发布了与我相同的答案。我删除了我的,因为它是重复的,并投了你的票。 – 2012-02-05 12:19:23

1
function array_search_value(&$haystack, array $keys, $needle) 
{ 
    foreach($keys as $key) 
     if($haystack[$key] == $needle) 
      return true; 
    return false; 
} 
+0

'$ value'通过了哪里? ;) – TimWolla 2012-02-05 12:20:44

+0

@TimWolla :) ... – 2012-02-05 12:21:15

2

您可以使用array_filter探测truthy条目的数组。在你的情况下,你可以将它与preg_grep结合来过滤出有趣的条目。尽管你需要一个array_intersect_key解决方法,它适用于键:

$true = array_filter(
    array_intersect_key($user, 
    array_flip(preg_grep('/Study$/', array_keys($user)))) 
); 
if ($true) { 
+0

+1有趣的解决方案。 – TimWolla 2012-02-05 12:21:23

+0

这非常酷!也感谢你。 – cgwebprojects 2012-02-05 12:35:51

相关问题