0

我正在尝试过滤两个数组以使用我的 mysql 数据库中的用户 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。这是我的“参考数组”,这意味着我只需要 id (457,469,339,361)

对于最终结果,它应该如下所示:

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
    }   
}

但“钥匙”不同,这不应该工作......

4

5 回答 5

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);

在这里试试

是的!!如果你想要单独的数组,那么只需修改代码..创建新数组并推送数组中存在的元素

$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);
于 2013-08-02T07:14:27.283 回答
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);

?>
于 2013-08-02T07:14:00.780 回答
0

最好你使用 mysql 本身来完成这个任务。但是如果您需要继续在数组函数中使用此函数来检查第二个数组,如下所示,

foreach ($arr_partner_id as $key => $usr_ids) {
  if(in_array($usr_ids["id"], $arr_member_id)) {
    // do something
  }   
}
于 2013-08-02T07:23:14.337 回答
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;
   }
}
于 2013-08-02T07:10:36.727 回答
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'));
于 2013-08-02T07:21:22.170 回答