2016-09-01 4 views
-1

Я довольно новичок в PHP, и мне нужна помощь в добавлении определенной строки из файла JSON. Например у меня естьДобавить Sum from JSON

Array 
(
[0] => Array 
    (
     [id] => 1 
     [name] => "Computer" 
     [price] => 1000 

    ) 

[1] => Array 
    (
     [id] => 1 
     [name] => "Mouse" 
     [price] => 14 

    ) 

[2] => Array 
    (
     [id] => 1 
     [name] => "Computer" 
     [price] => 1500 


    ) 
[3] => Array 
    (
     [id] => 1 
     [name] => "Mouse" 
     [price] => 16 

    ) 
) 

выход должен быть

Array(
[name] => "Computer" 
[sum] => 2500 
) 

Array(
[name] => "Mouse" 
[sum] => 30 
) 

Я попытался с помощью этого

$i = 0; 
foreach ($array as $rows){ 
$i += $rows['price']; 
} 

, но это один в основном добавляет их всех.

Я ценю помощь!

+1

Это не JSON. У вас есть массив PHP, содержащий другие массивы. – Chris

+0

oops yeah. я хочу сказать, что вывести его как JSON :) –

ответ

0

код

<?php 
// make origin 
$array_origin = array(
    array('id' => 1,'name' => 'Computer','price' => 1000), 
    array('id' => 1,'name' => 'Mouse','price' => 14), 
    array('id' => 1,'name' => 'Computer','price' => 1500), 
    array('id' => 1,'name' => 'Mouse','price' => 16), 
); 
echo '<pre>' . var_export($array_origin, true) . '</pre><hr>'; 

// store name-price pair 
$stack=array(); 
foreach ($array_origin as $index => $array_part) { 
    $stack[$array_part['name']]=array_key_exists($array_part['name'],$stack)?$stack[$array_part['name']]+$array_part['price']:$array_part['price']; 
} 

// make output 
$j=0; 
$output=array(); 
foreach ($stack as $name => $sum) { 
    $output[]=array(
     'name' => $name, 
     'sum' => $sum 
    ); 
    echo '<pre>' . var_export($output[$j], true) . '</pre>'; 
    $j++; 
} 

Выход

enter image description here

Или использовать JSON, чтобы сделать происхождения массиву

$json_str='[ 
    { 
     "id":1, 
     "name":"Computer", 
     "price":"1000" 
    }, 
    { 
     "id":1, 
     "name":"Mouse", 
     "price":14 
    }, 
    { 
     "id":1, 
     "name":"Computer", 
     "price":1500 
    }, 
    { 
     "id":1, 
     "name":"Mouse", 
     "price":16 
    } 
]'; 

$array_origin=json_decode($json_str, true); 

Надеюсь, он может вам помочь ~

+0

Спасибо! Это правильный ответ :) –

0

С тех пор, как вы написали все это, я думаю, я могу написать вам быстрый цикл.

$answer = array(); 
foreach($oldarray as $val) 
{ 
    @$answer[$val['name']] += $val['sum']; 
} 
print_r($answer); 

Это не точный ответ, но он доставит вас туда.

0

Попробуйте этот код:

$result = []; 
foreach ($array as $row) { 
    if (array_key_exists($row['name'], $result)) { 
     $result[$row['name']]['sum'] += $row['price']; 
    } else { 
     $result[$row['name']] = [ 
      'name' => $row['name'], 
      'sum' => $row['price'], 
     ]; 
    } 
} 
print_r($result);