2012-04-11 90 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]; 
    } 
}