2017-08-18 23 views
0

圖像,我們有2個ASSOCS陣列:PHP最好的方式去比較assoc命令陣列,並創建一個新的與匹配數

array 
    0 => 
    object(stdClass) 
     public 'id' => string '1' 
     public 'desc' => string 'Lorem Ipsum' 
    1 => 
    object(stdClass) 
     public 'id' => string '5' 
     public 'desc' => string 'Lorem Ipsum' 
    2 => 
    object(stdClass) 
     public 'id' => string '7' 
     public 'desc' => string 'Lorem Ipsum' 
    3 => 
    object(stdClass) 
     public 'id' => string '8' 
     public 'desc' => string 'Lorem Ipsum' 
    4 => 
    object(stdClass) 
     public 'id' => string '12' 
     public 'desc' => string 'Lorem Ipsum' 
    5 => 
    object(stdClass) 
     public 'id' => string '13' 
     public 'desc' => string 'Lorem Ipsum' 
array 
    0 => 
    object(stdClass) 
     public 'id' => string '2' 
     public 'desc' => string 'Lorem Ipsum' 
    1 => 
    object(stdClass) 
     public 'id' => string '5' 
     public 'desc' => string 'Lorem Ipsum' 
    2 => 
    object(stdClass) 
     public 'id' => string '7' 
     public 'desc' => string 'Lorem Ipsum' 
    3 => 
    object(stdClass) 
     public 'id' => string '58' 
     public 'desc' => string 'Lorem Ipsum' 
    4 => 
    object(stdClass) 
     public 'id' => string '66' 
     public 'desc' => string 'Lorem Ipsum' 
    5 => 
    object(stdClass) 
     public 'id' => string '78' 
     public 'desc' => string 'Lorem Ipsum' 

會是什麼創建一個新數組的最佳方式,其中所有條目都匹配'id'?所以基本上就像在2個包含這些數據的表上使用INNER JOIN做一個SQL查詢一樣。

結果應該是這樣的:

array 
    0 => 
    object(stdClass) 
     public 'id' => string '5' 
     public 'desc' => string 'Lorem Ipsum' 
    1 => 
    object(stdClass) 
     public 'id' => string '7' 
     public 'desc' => string 'Lorem Ipsum' 

我嘗試了一下週圍,但每個對象檢查是否有其他的陣列中的等價做一個陣圖似乎不是最好的解決方案。

感謝

+1

使用['和array_uintersect()'](http://php.net/manual/en/function.array-uintersect.php)。或者,如果可能,在創建數組時使用屬性'id'的值作爲鍵,然後使用['array_intersect_key()'](http://php.net/manual/en/function.array-intersect-key .PHP)。 – axiac

回答

0

這個工作對我來說:

<?php 

$arr1 = array(
    (object) array(
     'id' => '4', 
     'desc' => 'Four' 
    ), 
    (object) array(
     'id' => '5', 
     'desc' => 'Five' 
    ), 
    (object) array(
     'id' => '3', 
     'desc' => 'Three' 
    ) 
); 

$arr2 = array(
    (object) array(
     'id' => '2', 
     'desc' => 'Two' 
    ), 
    (object) array(
     'id' => '4', 
     'desc' => 'Four' 
    ), 
    (object) array(
     'id' => '6', 
     'desc' => 'Six' 
    ) 
); 

$arr3 = array(); 
foreach($arr1 as $obj1){ 
    foreach($arr2 as $obj2){ 
     if($obj1->id == $obj2->id){ 
      $arr3[] = $obj1; 
      break; 
     } 
    } 
} 

echo '<pre>'; 
print_r($arr3); 
echo '</pre>'; 
相關問題