2013-08-02 48 views
0

我想筛选两个数组,以获得从我的MySQL数据库PHP - 不同尺寸的比较和筛选两个数组

用户ID的最终结果,我有两个数组的第一个:

print_r($arr_partner_id); 
Array ( 
[0] => Array ([id] => 335 [id_partner] => 0) 
[1] => Array ([id] => 469 [id_partner] => 1) 
[2] => Array ([id] => 457 [id_partner] => 1) 
[3] => Array ([id] => 339 [id_partner] => 0) 
[4] => Array ([id] => 361 [id_partner] => 0)) 

,第二个:

print_r($arr_member_id); 
Array ( 
[0] => 457 
[1] => 469 
[2] => 339 
[3] => 361) 

现在我想比较这两个只用自己的ID并删除不包括在“$ arr_member_id”阵列的ID。这是我的“参考阵”,这意味着我只需要(457469339361)

的最终结果应该看起来像这样的ID:

print_r($arr_partner_final_id); 
Array ( 
[0] => Array ([id] => 469 [id_partner] => 1) 
[1] => Array ([id] => 457 [id_partner] => 1) 
[2] => Array ([id] => 339 [id_partner] => 0) 
[3] => Array ([id] => 361 [id_partner] => 0)) 

我用foreach

foreach ($arr_partner_id as $key => $usr_ids) { 
    if($arr_partner_id[$key]['id'] == $arr_member_id[$key]) { 
     // do something 
    } 
} 

tryed它但“钥匙”是不同的,这不应该工作...

+0

在你的'foreach'您指定的键'$ key1',但在'if'语句使用'$ key',这是这个问题中的错字,还是你的代码是这样的? –

+0

从我SRY打字错误...我纠正。 – Jim

回答

1

尝试这个(工作实施例:http://codepad.org/ApFcA3Zo

<?php 

$arr_partner_id=array ( 
'0' => array ('id' => 335, 'id_partner' => 0) , 
'1' => array ('id' => 469, 'id_partner' => 1) , 
'2' => array ('id' => 457, 'id_partner' => 1) , 
'3' => array ('id' => 339, 'id_partner' => 0) , 
'4' => array ('id' => 361, 'id_partner' => 0)) ; 


$arr_member_id=array ( 
'0' => 457 , 
'1' => 469 , 
'2' => 339 , 
'3' => 361) ; 

$final =array(); 

foreach($arr_partner_id as $arr) 
{ 
    foreach($arr_member_id as $parr) 
    { 
    if($arr['id'] == $parr) 
    { 
    $final[]=$arr; 
    } 
    } 
} 


print_r($final); 

?> 
+0

应该有内部的foreach内休息,退出循环,当条件满足,那么你就不会浪费计算机周期不必要的。 – Borgtex

+0

@Borgtex感谢您的评论。将来要记住这一点。 – cartina

0

也许类似于:

foreach ($arr_member_id as $usr_id){ 
    foreach ($arr_partner_id as $partner){ 
    if ($usr_id == $partner['id']) {$arr_partner_final_id[]=$partner;break; 
    } 
} 
3

使得它作为简单,并且通过该阵列使用仅一个循环来循环和签如果ID为存在于另一组阵列的使用in_array()

试试这个

for($i=0;$i<count($arr_partner_id);$i++){ 
    if(!in_array($arr_partner_id[$i]['id'],$arr_member_id)){ 
    unset($arr_partner_id[$i]); 
    } 
} 

print_r($arr_partner_id); 

尝试here

和Yes!如果你想为单独的数组然后只需修改code..create新的阵列,推动存在于阵列

$finalArray=array(); 
for($i=0;$i<count($arr_partner_id);$i++){ 
    if(in_array($arr_partner_id[$i]['id'],$arr_member_id)){ 
    $finalArray[]=$arr_partner_id[$i]; 
} 
} 

print_r($finalArray); 
+0

使用该解决方案时,索引以“1”开头,而不是“0”,因为在这种情况下,第一行受到影响......但如果例如第三行受到影响,索引为(0,1,3,4)i我不知道,但这个可以带来的问题... – Jim

+0

嗯..第一个解决方案有问题..因为它删除,当你什么都没有做与数组索引的index..and应该只使用它..反正我提供的第二个解决方案..与它无关紧要...创建新的数组并推送数组中存在的元素.. :) – bipen

0

另一种解决方案中的元素(没有明确的循环):

$arr_partner_id=array ( 
'0' => array('id' => 335, 'id_partner' => 0), 
'1' => array('id' => 469, 'id_partner' => 1), 
'2' => array('id' => 457, 'id_partner' => 1), 
'3' => array('id' => 339, 'id_partner' => 0), 
'4' => array('id' => 361, 'id_partner' => 0)); 


$arr_member_id=array ( 
'0' => 457, 
'1' => 469, 
'2' => 339, 
'3' => 361); 


function compare($v){global $arr_member_id;return in_array($v['id'], $arr_member_id);} 
var_dump($arr_partner_id = array_filter($arr_partner_id, 'compare')); 
0

更好的你使用mysql本身做这个任务。但如果你需要继续使用此功能in array检查第二阵列下面给出,

foreach ($arr_partner_id as $key => $usr_ids) { 
    if(in_array($usr_ids["id"], $arr_member_id)) { 
    // do something 
    } 
}