2012-04-11 61 views
3

我的问题是:对数组匹配多个值

我呼吁$ ownerArray另一个阵列需要核对,如果一个键存在于两个数组显示匹配项的值的数组。 $ ownerArray由数据库填充,所以我不能在if语句中写一个ir语句。

$ ownerArray看起来就像这样:

$ownerArray = array(0 =>'Name0',1 =>'Name1',2 =>'Name2',3 =>'Name3'); 

然后我有另一个阵列称为具有取决于用户选择什么不同数量的值$用户,所以$用户看起来是这样的:

$Users = '1,2' 

或像这样:

$Users = '1,3' 

$用户是绝不相同。

但我需要$ ownerArray的$值时显示任何的$的值的整数的用户匹配的$ ownerArray

实施例任何$键:

foreach($ownerArray as $key => $value) 
      { 
       if(in_array($key,array($Users))) 
       { 
        print $value; 
       } 
      } 

该方法停止在拳头匹配并显示正确的名称。如果更多值匹配,循环不会继续打印。

即时寻找的是如果$ Users ='1,3'我for循环将打印$ ownerArray中的Name1和Name3。

感谢您的帮助!

ps我知道我可以使用if($ key == 1 || $ key == 2),但这不适用于这种情况。

回答

4
$merged = array_flip(array_intersect(array_flip($owners), explode(',', $users))); 
+0

一个衬垫FTW! – rdlowrey 2012-04-11 18:43:44

+0

我一直都在做这种事情。 +1 – 2012-04-11 18:45:21

+0

'$ merged = array_flip(array_intersect(array_flip($ owners),explode(',',$ user)));'no spacer FTW – 2012-04-11 18:45:24

1

像这可能是工作

<?php 

$ownerArray = array(0 =>'Name0',1 =>'Name1',2 =>'Name2',3 =>'Name3'); 
$users = explode(',','1,2'); 

if(count($users) > 0){ 
    foreach($users as $user){ 
     if($key = array_search($user,$ownerArray)){ 
      echo $key; 
     } 
    } 
} 


?> 
0

只需翻转你的逻辑。你实际上想要遍历你的用户,并且如果它们存在于所有者数组中,而不是其他方式打印出来。 (道歉,如果这个代码是稍微偏离,但你得到了这个想法。)

foreach($Users as $value) 
{ 
    if(in_array($value,array($ownerArray))) 
    { 
    print $ownerArray[$value]; 
    } 
}