2013-04-10 113 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函数。

相关问题