2013-04-10 117 views
2

我只是想知道如果PHP已經內置函數來過濾基於另一個數組的鍵的數組?使用一個數組來過濾另一個數組

陣列1 - 是所有用戶的名單和他們的基本信息

陣列2 - 包含與用戶ID的

例如會議日程

array 1 [0]([user_id], [name], [age], [contact]), 
     [1]([user_id], [name], [age], [contact]) 
     etc. 

array 2 [0]([user_id], [time], [date], [place]) 
     [1]([user_id], [time], [date], [place]) 

有沒有辦法來過濾陣列1,使其只包含對應於行[USER_ID]數組2.

我明白,我可以使用循環和自定義函數來實現這一目標不過,我只是想看看有沒有簡單的方法。

感謝

+0

你的意思是像array_merge? – hjpotter92 2013-04-10 17:52:21

回答

2
array_intersect_key($array1, $array2) 

PHP Manual

代碼:

$array1 = array('user1'=> array('name'=>'name1','age' => 'age1'), 
       'user2'=> array('name'=>'name2','age' => 'age2'), 
       'user3'=> array('name'=>'name3','age' => 'age3')); 

//array with key to search for 
$array2 = array('user2'=> array('time'=>'time2','date' => 'date2'));  
echo '<pre>'; 
print_r(array_intersect_key($array1,$array2)); 
echo '</pre>'; 

o/p: 

    Array 
(
    [user2] => Array 
     (
      [name] => name2 
      [age] => age2 
     ) 

) 

編輯:

啊有你的問題。如果你想操縱你定的數組按照上面的結構,然後應用array_intersect_key(),你可以這樣做:

function compare($key1,$key2){ 
    global $array1,$array2; 

    if($array1[$key1]['userid'] == $array2[$key2]['userid']) 
     return 0; 
    if($array1[$key1]['userid'] > $array2[$key2]['userid']) 
     return 1; 
    else 
     return -1; 
} 

$array1 = array(array('userid'=>'user1','name'=>'name1','age' => 'age1'), 
       array('userid'=>'user2','name'=>'name2','age' => 'age2'), 
       array('userid'=>'user3','name'=>'name3','age' => 'age3')); 

//array with key to search for 
$array2 = array(array('userid'=>'user2','time'=>'time2','date' => 'date2'));  

echo '<pre>'; 
print_r(array_intersect_ukey($array1,$array2,'compare')); 
echo '</pre>'; 

o/p: 
==== 
Array 
(
    [1] => Array 
     (
      [userid] => user2 
      [name] => name2 
      [age] => age2 
     ) 

) 
+0

似乎確實在工作,但[user_id]是關閉的?! – 2013-04-10 18:14:57

+0

沒有得到你?你能說明嗎? – 2013-04-10 18:17:50

+0

schedule [user_id] = 24,array_intersect_key的結果顯示[user_id] = 23。 – 2013-04-10 18:21:02

0

我已經決定了它更容易只使用2個循環。

第一個來創建[USER_ID]的陣列和使用in_array像第二個,這樣:

$user_id = array(); 
foreach($users as $id){ 
$user_id[]= $id['user_id']; 
} 
$names = array(); 
foreach ($schedule as $name){ 
if(in_array($name['id'], $user_id)) $names[] = $name; 
} 

太簡單打擾尋找一個PHP函數。

相關問題