2013-08-02 44 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 
    } 
}