获取 php 多维数组的总和

get sum of php multidiamentional array

我希望将所有键的总和存储在一个数组中,这是我的示例代码

<?php

// Sample data
$category = (object) ['category_name' => '32459*1500*lab*1,32460*400*lab*1,32461*600*lab*1'];
// process
$category_sale_data = explode(',', $category->category_name);
foreach ($category_sale_data as $key => $value) {
    
                list($sale_key, $sale_value) = explode('*', $value);
                $category->sale_data[$sale_key][] = $sale_value;
                //$category->sale_data_sum[$sale_key][] += $sale_value;
}
// display
print_r($category);

getting this output working example -> https://3v4l.org/NAKfb#v7.0.0

Here is expected to get //$category->sale_data_sum[$sale_key][] += $sale_value;

我期望这样的输出

stdClass Object
(
    [category_name] => 32459*1500*lab*1,32460*400*lab*1,32461*600*lab*1
    [sale_data] => Array
        (
            [32459] => Array
                (
                    [0] => 1500
                )

            [32460] => Array
                (
                    [0] => 400
                )

            [32461] => Array
                (
                    [0] => 600
                )

        )
    [sale_data_sum] => 2500

)

试试这个

<?php

    // Sample data
    $category = (object) ['category_name' => '32459*1500*lab*1,32460*400*lab*1,32461*600*lab*1'];
    // process
    $category_sale_data = explode(',', $category->category_name);
    foreach ($category_sale_data as $key => $value) {
        
                    list($sale_key, $sale_value) = explode('*', $value);
                    $category->sale_data[$sale_key][] = $sale_value;
                    //$category->sale_data_sum[$sale_key][] += $sale_value;
    }
    
    function sum($carry, $item)
    {
        $carry += array_values($item)[0];
        return $carry;
    }
    
    $a = array_reduce(array_values($category->sale_data), "sum"); 
    
    var_dump($a);

或者

<?php

// Sample data
$category = (object) ['category_name' => '32459*1500*lab*1,32460*400*lab*1,32461*600*lab*1'];
// process
$category_sale_data = explode(',', $category->category_name);
$category->sale_data_sum = null;
foreach ($category_sale_data as $key => $value) {
    
                list($sale_key, $sale_value) = explode('*', $value);
                $category->sale_data[$sale_key][] = $sale_value;
                $category->sale_data_sum += $sale_value;
}
// display
print_r($category);

只需这样做:

$category->sale_data_sum = 0; // initiate key
foreach ($category_sale_data as $key => $value) {
    list($sale_key, $sale_value) = explode('*', $value);
    $category->sale_data[$sale_key][] = $sale_value;
    $category->sale_data_sum += $sale_value; // add each sale value
}
$category = [ 'category_name' => '32459*1500*lab*1,32460*400*lab*1,32461*600*lab*1' ];

// category_name
$result['category_name'] = $category['category_name'];

// sale_data
$splitted = preg_split('/[*,]/', $category['category_name']);
for($i = 0; $i < count($splitted); $i += 4) {
  $result['sale_data'][$splitted[$i]] = $splitted[$i + 1];
}

// sale_data_sum
$result['sale_data_sum'] = array_sum($result['sale_data']);

print_r($result);