簡體   English   中英

PHP-比較和過濾具有不同維數的兩個數組

[英]PHP - compare and filter two arrays with different dimensions

我正在嘗試過濾兩個數組以從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與它們的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
    }   
}

但“鍵”不同,這不起作用...

使其變得簡單,只需使用一個循環即可遍歷數組,並使用in_array()檢查ID是否存在於另一組數組中

嘗試這個

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

試試這個(工作示例: 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);

?>

也許像:

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

另一個解決方案(無顯式循環):

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

最好您使用mysql本身來完成此任務。 但是,如果您需要繼續在數組函數中使用此功能,以檢查第二個數組,如下所示,

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM