2015-11-06 66 views
-3

我有兩個數組:PHP陣列搜索和刪除

陣列1:

Array ([0] => Array ([id] => et1 [supplier_id] => 4 [supplier_product_code] => 00054X [is_active] => 1) 
[1] => Array ([id] => et2 [supplier_id] => 4 [supplier_product_code] => 000558 [is_active] => 1) 
[2] => Array ([id] => et3 [supplier_id] => 5 [supplier_product_code] => 00054X [is_active] => 1)); 

陣列2:

Array ([0] => Array ([id] => et1 [same_sku] => et3); 

我需要從數組2刪除所有same_skus在陣列1。

所以從我的結果數組我需要陣列1是:

Array ([0] => Array ([id] => et1 [supplier_id] => 4 [supplier_product_code] => 00054X [is_active] => 1) 
[1] => Array ([id] => et2 [supplier_id] => 4 [supplier_product_code] => 000558 [is_active] => 1)); 

代碼,我現在所擁有的不工作。

public function search_array($array, $val) 
    { 
     foreach ($array as $key => $row) 
     { 
      if ($row['id'] === $val) 
      { 
         return $key; 
      } 
     } 
    } 

foreach($array2->result() as $row) 
     { 
      $id = $row->id; 
      $same_sku = $row->same_sku; 

      $key = $this->search_array($array1, $id); 

      if(!empty($key)) 
      { 
       $same_sku_key = $this->search_array($array1, $same_sku); 
       if(!empty($same_sku_key)) 
        unset($array1[$same_sku_key]); 
      } 
     } 
+0

到目前爲止你累了什麼?你能分享你的代碼嗎? – Nirnae

+0

@Nirnae我已經添加了我累了的東西 – user4676307

+0

您是否試圖組合這兩個數組並刪除重複值? – commanderZiltoid

回答

1

在下面的代碼中,我重新創建了您的示例中的兩個數組。然後我創建了一個函數,用於從乾草堆數組(array1)中刪除所有具有與針數組(array2)內的「same_sku」值相匹配的「id」的子數組。最後一行回顯結果數組。

EDIT 我已修改原始答案通過引用並取消不必要的子陣列,以通,而不是由值來傳遞,循環和返回另一個數組的數組值。這應該解決內存問題,以及您評論中提到的其他問題。

$array1 = array(
    array(
     'id'     => 'et1', 
     'supplier_id'   => '4', 
     'supplier_product_code' => '00054X', 
     'is_active'    => '1' 
    ), 
    array(
     'id'     => 'et2', 
     'supplier_id'   => '4', 
     'supplier_product_code' => '000558', 
     'is_active'    => '1' 
    ), 
    array(
     'id'     => 'et3', 
     'supplier_id'   => '5', 
     'supplier_product_code' => '00054X', 
     'is_active'    => '1' 
    ), 
    array(
     'id'     => 'et4', 
     'supplier_id'   => '5', 
     'supplier_product_code' => '00054X', 
     'is_active'    => '1' 
    ) 
); 

$array2 = array(
    array(
     'id'     => 'et1', 
     'same_sku'    => 'et3' 
    ), 
    array(
     'id'     => 'et2', 
     'same_sku'    => 'et4' 
    ) 
); 


function remove_same_sku(&$haystack, &$needles){ 

    foreach($needles as $needle){ 

     foreach($haystack as $key => $val){ 

      if($val['id'] === $needle['same_sku']){ 

       unset($haystack[$key]); 

      } 

     } 

    } 


} 

remove_same_sku($array1, $array2); 
echo print_r($array1); 
+0

謝謝你的回答,但我看到的問題是,不會我需要另一個函數來檢查$ haystack [$ key]不在$ returnArray []中,只能添加它? – user4676307

+0

我使用了函數,它的內存不足,我認爲這是因爲它插入了$ haystack中所有id不是same_sku的數據。因此,例如,如果第一個循環在same_sku et3上,它將從$ haystack中插入所有數據,其中id不等於$ et3,然後移動到下一個增量並再次執行相同操作。 – user4676307

+0

答案已經更新。請參閱編輯評論。 – commanderZiltoid