2016-04-06 2 views
1

У меня есть несколько х мерный массив, как показано ниже,Как удалить повторяющиеся значения из многомерного массива с одним уникальным значением во всем массиве

$product = array( 
      "2e471a22b1b994a7cb3f3a40cee9fba2" => array (
       "product" => 6004, 
       "unique_key" => 3a8a5cb029ee3b92cfc90de23e2329ab,  
       "product_id" => 51, 
     "line_total"=>99, 
     "quantity"=>1, 
     "data"=> array(
     "id"=> 51, 
     "post"=>array(
      "ID"=>51, 
      "post_title"=>"Prodcut four - control",    
      ), 
     "price"=>99  
     ) 
      ), 
    "a7d0f813832ec8a2bf24269ff7145d0c" => array (
       "product" => 6004, 
       "unique_key" => c30d1ca26d30aa3dc3c9aa04f0b585ce,  
       "product_id" => 51, 
     "line_total"=>99, 
     "quantity"=>1, 
     "data"=> array(
     "id"=> 51, 
     "post"=>array(
      "ID"=>51, 
      "post_title"=>"Prodcut four - control",    
      ), 
     "price"=>99  
     ) 
      ) 
     ); 

нужно удалить повторяющиеся значения на основе значения массива «product_id» и увеличить количества, основанные на количестве продуктов. Примечание: вышеупомянутый массив имеет «уникальный ключ», поэтому для получения результата массива необходим любой уникальный ключ.

Expected Result should be: 
$resultproduct = array( 
     "2e471a22b1b994a7cb3f3a40cee9fba2" => array (
      "product" => 6004, 
      "unique_key" => 3a8a5cb029ee3b92cfc90de23e2329ab,  
      "product_id" => 51, 
    "line_total"=>99, 
    "quantity"=>2, 
    "data"=> array(
    "id"=> 51, 
    "post"=>array(
     "ID"=>51, 
     "post_title"=>"Prodcut four - control",    
     ), 
    "price"=>99  
    ) 
     )); 
+0

Возможный дубликат [Как удалить повторяющиеся значения из многомерный массив в PHP] (http://stackoverflow.com/questions/307674/how-to-remove-duplicate-values-from-a-multi-dimensional -array-in-php) –

+0

Loop массив продуктов в foreach затем построил структуру массива так, как вам нравится, и увеличит счетчик, если вы найдете тот же идентификатор продукта –

+0

Hey Ramkumar, откуда берутся данные? – Mike

ответ

0

Working code at eval.in

Я стараюсь сделать код легко понять, так больше переменных и строк кода, чем абсолютно необходимо ,

Пояснение:

1) Необходимо использовать один из первоначального индекса product массива в качестве ключа вывода таблицы, например, «2e471a22b1b994a7cb3f3a40cee9fba2» для продукта 51.

2) Он должен быть быстро связанным с входным продуктом. К выходному ключу. Итак, я использовал справочную таблицу ProductIdList, которая соответствует productId - output.

Это двухэтапный поиск, чтобы найти запись на выходе и добавить к ней количество.

Код:

// create a product_id => first key table 
$productIdList = array(); 

// output... 
$productTotal = array(); 

foreach ($product as $origIndex => $entry) { 

    $curProductId = $entry['product_id']; 

    // check product_id exists in the lookup... 
    if (isset($productIdList[$curProductId])) { // add to the total... 

     $productTotalIndex = $productIdList[$curProductId]; 

     $productTotal[$productTotalIndex]['quantity'] += $entry['quantity']; 
    } 
    else { // add the entry to the output and the productIdList... 

     $productIdList[$curProductId] = $origIndex; 

     $productTotal[$origIndex] = $entry; 
    } 
} 

Выходные данные: итоги массива:

Array 
(
    [2e471a22b1b994a7cb3f3a40cee9fba2] => Array 
     (
      [product] => 6004 
      [unique_key] => 3a8a5cb029ee3b92cfc90de23e2329ab 
      [product_id] => 51 
      [line_total] => 99 
      [quantity] => 2 
      [data] => Array 
       (
        [id] => 51 
        [post] => Array 
         (
          [ID] => 51 
          [post_title] => Prodcut four - control 
         ) 
        [price] => 99 
       ) 
     ) 

    [test02] => Array 
     (
      [product] => 6664 
      [unique_key] => c30d1ca26d30aa3dc3c9aa04f0b585ce 
      [product_id] => 666 
      [line_total] => 99 
      [quantity] => 579 
      [data] => Array 
       (
        [id] => 666 
        [post] => Array 
         (
          [ID] => 666 
          [post_title] => Prodcut 666 - control 
         ) 
        [price] => 99 
       ) 
     ) 
) 

PRODUCTID оригинальному список ключей:

array (size=2) 
    51 => string '2e471a22b1b994a7cb3f3a40cee9fba2' (length=32) 
    666 => string 'test02' (length=6) 
+0

Прекрасно работает благодаря – Ramkumar

0

Необходимо обработать каждый продукт и использовать product_id как ключ для нового массива. Это добавляет величины, как она идет, так что должно работать для любых других величин, чем 1.

$result = []; 

foreach ($product as $p) 
{ 
    if (isset($result[$p['product_id']])) 
    { 
     $result[$p['product_id']]['quantity']+= $p['quantity']; 
    } 

    else 
    { 
     $result[$p['product_id']] = $p; 
    } 
} 

print_r($result); 
Смежные вопросы