2014-01-30 3 views
2

Я хочу суммировать массив в том же ключе и другом значении.Как суммировать один и тот же массив в php

Array 
(
    0 => Array 
     (
      'locker_id' => 3, 
      'locker_model' => 1, 
      'qty' => 2 
     ), 

1 => Array 
    (
     'locker_id' => 3, 
     'locker_model' => 1, 
     'qty' => 1 
    ), 

2 => Array 
    (
     'locker_id' => 2, 
     'locker_model' => 1, 
     'qty' => 2 
    ), 

3 => Array 
    (
     'locker_id' => 3, 
     'locker_model' => 1, 
     'qty' => 2 
    ), 
4 => Array 
    (
     'locker_id' => 2, 
     'locker_model' => 1, 
     'qty' => 2 
    ) 

); 

Я хочу, чтобы вывести его

Array 
(
    0 => Array 
     (
      'locker_id' => 3, 
      'locker_model' => 1, 
      'qty' => 5 
     ), 
1 => Array 
    (
     'locker_id' => 2, 
     'locker_model' => 1, 
     'qty' => 4 
    ) 
); 

Спасибо.

+1

Из вашего описания, трудно сказать, что вы пытаетесь сделать. Можете ли вы быть более конкретным? –

+0

Я думаю, что «locker_id» должен быть «2» во 2-й клавише 2-го массива –

ответ

0

попробовать это

$ARR_OUTPUT = array(); 

    // $arr will contains your input array 
    foreach($arr as $arr_val) 
    { 
     $locker_id = $arr_val['locker_id']; 
     $locker_model = $arr_val['locker_id']; 
     $qty = $arr_val['locker_id']; 



     if(isset($ARR_OUTPUT[$locker_id][$locker_model])) 
     {  
      $ARR_OUTPUT[$locker_id][$locker_model] += $qty; 
     } 
     else 
     { 
      $ARR_OUTPUT[$locker_id][$locker_model] = $qty; 
     } 



     } 

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

$ARR_OUTPUT2 = array(); 

    foreach($ARR_OUTPUT as $locker_id=>$arr_values) 
    { 
     foreach($arr_values as $locker_model=>$qty) 
     { 
      $arr_temp['locker_id'] = $locker_id; 
      $arr_temp['locker_model'] = $locker_model; 
      $arr_temp['qty'] = $qty; 
      $ARR_OUTPUT2[] = $arr_temp; 
     } 
    } 

    echo "<pre>"; 
    print_r($ARR_OUTPUT2); 
1
$dataArr = array 
    (
     0 => array 
      (
       'locker_id' => 3, 
       'locker_model' => 1, 
       'qty' => 2 
      ), 

     1 => array 
      (
       'locker_id' => 3, 
       'locker_model' => 1, 
       'qty' => 1 
      ), 

     2 => array 
      (
       'locker_id' => 2, 
       'locker_model' => 1, 
       'qty' => 2 
      ), 

     3 => array 
      (
       'locker_id' => 3, 
       'locker_model' => 1, 
       'qty' => 2 
      ), 
     4 => array 
      (
       'locker_id' => 2, 
       'locker_model' => 1, 
       'qty' => 2 
      ) 

    ); 

    $sumArr = array(); 
    if(count($dataArr)>0){ 
     foreach($dataArr as $data){ 

      if(!isset($sumArr[$data['locker_id']])){ 
       $sumArr[$data['locker_id']] = $data; 
      } 
      $sumArr[$data['locker_id']]['qty'] +=$data['qty']; 
     } 
    } 
    echo "<pre>";print_r($sumArr); 
2

Вы можете просматривать массив, создавая новый с ключами, как «locker_id-locker_model», то вы можете легко проверить, если ваш шкафчик существует в этом массиве с функцией array_key_exists ,

$inputArray = array(...); // this is your message array 
$outputArray = array(); 

foreach($inputArray as $locker) 
{ 
    if(!array_key_exists($locker["locker_id"]."-".$locker["locker_model"], $outputArray)) 
    { 
     $outputArray[ $locker["locker_id"]."-".$locker["locker_model"] ] = array(
      "locker_id" => $locker["locker_id"], 
      "locker_model" => $locker["locker_model"], 
      "qty" => 0 
     ); 
    } 

    $outputArray[ $locker["locker_id"]."-".$locker["locker_model"] ]["qty"]++; 
} 

var_dump($outputArray); 
1
$result = array(); 

foreach($array as $key => $value){ 
    if(isset($value['locker_id'])){ 
    $result[$value['locker_id']]['qty'] += $value['qty']; 
    } 
    else{ 
    $result[$value['locker_id']] = $value; 
    } 

} 

Вы должны перебрать ваш массив и сохранить его на другой, скажем, $ результата. В $ result вы должны поместить ключ locker_id как ключ, и тогда вам нужно только проверить, существует ли этот ключ. Если вы добавляете значение qty, если вам не нужно добавлять весь новый элемент.

+1

. Ваш ответ был бы гораздо более полезным, если бы он объяснил, как он работает и как он отвечает на вопрос. Таким образом, искатель узнает больше, чем просто копирует ваш ответ. – AdrianHHH

1

Учитывая $ array1 ваш первый массив,

$array2 = array(); 
foreach($array1 as $k=>$v) { 
    if(!isset($array2[$v['locker_id']])) { 
     $array2[$v['locker_id']] = $v; 
    } else { 
     $array2[$v['locker_id']]['qty'] += $v['qty']; 
    } 
} 

print_r($array2); 
1

Попробуйте $ обр ваш массив

$j = 0; 
$new = array(); 
$new[0][qty]; 

for($i=0;$i<arraylength;$i++){ 
foreach($arr as $key => $value) { 
if($arr[$i][lockerid] == $arr[$key][lockerid]) { 
$new[$j][lockerid] = $arr[$key][lockerid]; 
$new[$j][lockermodel] = $arr[$key][lockermodel]; 
$new[$j][qty] = $new[$i][qty] + $arr[$key][qty]; 
J++; 
} 
} 
} 
+0

Что такое $ new [0] [qty]; линия означает? – Zolyboy

+0

удалите, что он будет работать и без этого. – Shivam

Смежные вопросы