2017-02-07 14 views
0
$arr = array(
    0 => array('item_id' => 13, 
       'item_qty' => 3, 
    ), 
    1 => array('item_id' => 10, 
       'item_qty' => 7, 
    ), 
    2 => array('item_id' => 13, 
       'item_qty' => 2, 
    ), 
    3 => array('item_id' => 10, 
       'item_qty' => 4, 
    ), 
    4 => array('item_id' => 10, 
       'item_qty' => 4, 
    ), 
); 

Как добавить item_qty, если соответствует item_id, и сохраните новый результат в массиве?Как добавить 'item_qty', если 'item_id' соответствует, и сохранить новый результат в массиве?

+0

Просьба показать, что вы пробовали, и каков ваш ожидаемый результат –

+0

Это как вы могли бы попросить коллегу или друга? Просто бросать на стол случайные вещи и ждать ответа? Пожалуйста, прочитайте http://stackoverflow.com/help/mcve и http://stackoverflow.com/help/how-to-ask – Yoshi

+0

Добро пожаловать в StackOverflow, можете ли вы показать нам пример того, что именно вы хотите достичь и показать нас, что вы уже пробовали? – Jerodev

ответ

1

Я думаю, что это то, что вам нужно. закодируйте массив и установите item_id как ключ к новому массиву и проверьте, действительно ли элемент item_id isset добавляет количество с существующим количеством, подобным этому.

<?php 

    $arr = array (0 => array ('item_id' => 13 , 'item_qty' => 3), 
        1 => array ('item_id' => 10 , 'item_qty' => 7), 
        2 => array ('item_id' => 13, 'item_qty' => 2), 
        3 => array ('item_id' => 10 ,'item_qty' => 4), 
        4 => array ('item_id' => 10 ,'item_qty' => 4)); 

    $new_array =array(); 

    foreach($arr as $key=>$row) 
    { 

     $new_array[$row['item_id']]=isset($new_array[$row['item_id']])? array('item_id'=>$row['item_id'],'item_qty'=>$row['item_qty']+$new_array[$row['item_id']]['item_qty']) : $row; 
    } 

    echo "<pre>"; 
    print_r($new_array); 

    ?> 

Выход:

Array 
    (
     [13] => Array 
      (
       [item_id] => 13 
       [item_qty] => 5 
      ) 

     [10] => Array 
      (
       [item_id] => 10 
       [item_qty] => 15 
      ) 

    ) 

Update 1

Использование array_values для сброса ключа массива.

 Array 
     (
      [0] => Array 
       (
        [item_id] => 13 
        [item_qty] => 5 
       ) 

      [1] => Array 
       (
        [item_id] => 10 
        [item_qty] => 15 
       ) 

     ) 
+0

хорошая работа (Y) ... –

+0

не могли бы вы объяснить код? Он работает нормально. Благодаря! – Nigel

0

попробовать сделать что-то вроде этого

function add_value($arr, $itemId) 
{ 
    foreach($arr as $k => $v) 
    { 
     if ($v['item_id'] == $itemId) 
     { 
      $arr[$k]['item_qty']++; 
     } 
    } 

    return $arr; 
} 

var_dump(add_value($arr,10)); 

Результат:

$arr = array (0 => array ('item_id' => 13 , 'item_qty' => 3), 1 => array ('item_id' => 10 , 'item_qty' => 8), 2 => array ('item_id' => 13, 'item_qty' => 2), 3 => array ('item_id' => 10 ,'item_qty' => 5), 4 => array ('item_id' => 10 ,'item_qty' => 5),); 
0

я думаю, что вы хотите, как этот

$item_id = 10; 
$test = []; 
foreach ($arr as $key => $value) { 
    if($value['item_id'] == $item_id){ 
     $value['item_qty'] += 10; 
    } 
    array_push($test, $value); 
} 
print_r($test); 

Результат, как этот

Array ([0] => Array ([item_id] => 13 [item_qty] => 3) [1] => Array ([item_id] => 10 [item_qty] => 17) [2] => Array ([item_id] => 13 [item_qty] => 2) [3] => Array ([item_id] => 10 [item_qty] => 14) [4] => Array ([item_id] => 10 [item_qty] => 14)) 
1

Просто переверните его, поместите все идентификаторы в виде ключей в новый массив и добавьте значения, где совпадают ключи.

$output = array(); 
foreach ($arr as $v) { 
    if (!array_key_exists($v['item_id'], $output)) 
     $output[$v['item_id']] = $v['item_qty']; 
    else 
     $output[$v['item_id']] += $v['item_qty']; 
} 

Live demo

Выход $output с вашего массива будет

Массив ( [13] => 5 [10] => 15 )

, где ключ представляет идентификатор и значения qu antity.