我只是想知道php是否已内置函数来根据另一个数组的键过滤数组?
数组1 - 是所有用户及其基本信息的列表
数组2 - 包含具有用户ID
的会议日程安排e.g。
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,使其只包含与数组2中[user_id]对应的行。
我知道我可以使用循环和自定义函数来实现这一点,但我只是想知道是否有一种简单的方法。
由于
答案 0 :(得分:2)
array_intersect_key($array1, $array2)
代码:
$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
)
)
答案 1 :(得分: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函数。