2015-11-06 67 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