2017-02-15 2 views
1

Как проверить, содержит ли вложенный массив дубликаты? если он содержит дубликат, то как его обновить?.Codeignitor. Как проверить дубликаты в вложенном массиве и обновить его, если существуют дубликаты?

Пример

Array 
(

[0] => Array 
    (
     [pre_order_id] => 10 
     [product_id] => 1 
     [product_quantity] => 11 
     [product_unit_id] => 2 
     [storage_location_id] => 1 
     [price] => 1111 
    ) 

    [1] => Array 
     (
      [pre_order_id] => 10 
      [product_id] => 1 
      [product_quantity] => 11 
      [product_unit_id] => 2 
      [storage_location_id] => 1 
      [price] => 1111 
     ) 

    [2] => Array 
     (
      [pre_order_id] => 10 
      [product_id] => 3 
      [product_quantity] => 11 
      [product_unit_id] => 2 
      [storage_location_id] => 1 
      [price] => 1111 
     ) 

) 

Здесь product_id дублируется в двух случаях .i хотят оставить только один, а также обновлять количество его, добавив product_quantity другого массива, который будет отброшен.

Я попробовал этот

// $input = array_map("unserialize", array_unique(array_map("serialize", $data_array))); 

Но это только удаляет дубликаты не обновляются.

Спасибо заранее.

+0

хорошо, если вы сделаете индекс массива на основе выключения pre_order_id, а не только 0,1,2 и т. д. то дубликаты будут перезаписаны самим собой, тем самым устраняя проблему. – Robot70

ответ

0

Если вы хотите сделать это в чистом PHP вы можете использовать что-то вроде этого:

function cleanDuplicates($aInput) { 
    $outPutArray = array(); 
    foreach($aInput as $element) { 
     if(!isset($outPutArray[$element["product_id"]])) { 
      $outPutArray[$element["product_id"]] = $element; 
     } 
     else { 
      $outPutArray[$element["product_id"]]["product_quantity"] += $element["product_quantity"]; 
     } 
    } 

    return $outPutArray; 
} 
+0

Спасибо. Работать как шарм. –

0

После удаления дубликатов. Для обновления многомерного массива вам необходимо использовать $this->db->update_batch(). Как это ..

$this->db->update_batch('table_name',$input,$product_id); 

подробнее см Codeigniter Query Builder