сумма значений в подмассиве - PullRequest
0 голосов
/ 17 февраля 2020

это то, как я сохраняю значения в массиве

$array[$row['name']][] = $row['from'] - $row['to'];

и вот результат

Array
(
   [name1] => Array
    (
        [0] => 1
        [1] => 12
        [2] => 10
    )

)

Array
(
   [name2] => Array
    (
        [0] => 0.25
        [1] => 0.55
        [2] => 0.35
        [3] => 5
    )

)

мне нужен результат как

echo $sum_of_first_array. "hours" .$name; 

или:

23 часа name1

6.15 часов name2

...

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Вы можете запустить свои значения через array_sum, используя array_map

$array = array_map('array_sum', $array);

В общем, что-то вроде -


$rows = [
    ['name' => 'name1', 'from' => 4, 'to' => 3],
    ['name' => 'name1', 'from' => 32, 'to' => 20],
    ['name' => 'name1', 'from' => 999, 'to' => 989],
    ['name' => 'name2', 'from' => 10.25, 'to' => 10],
    ['name' => 'name2', 'from' => 10.55, 'to' => 10],
    ['name' => 'name2', 'from' => 10.35, 'to' => 10],
    ['name' => 'name2', 'from' => 5, 'to' => 0],
];
$array = [];
foreach ($rows as $row) {
    $array[$row['name']][] = $row['from'] - $row['to'];    

}

print_r($array); // what you have so far

$array = array_map('array_sum', $array);

print_r($array); // what you want

См. https://www.tehplayground.com/paAkQ8riS5KwFSfP

Хотя лучшим решением было бы добавить их как вы go, например


$array = [];
foreach ($rows as $row) {
    $array[$row['name']] += $row['from'] - $row['to'];    

}

print_r($array);

См. https://www.tehplayground.com/kA2QDWUluJ53Ueia

0 голосов
/ 17 февраля 2020

Я могу ошибаться, но для меня это выглядит как PHP. В этом случае я бы, вероятно, просто использовал объекты следующим образом:

<?

class className {
    public $name;
    public $hours;
}

$name1 = new className();
$name1->name = "name1";
$name1->hours = array(1, 12, 10);

$name2 = new className();
$name2->name = "name2";
$name2->hours = array(0.25, 0.55, 0.35, 5);

$names = array($name1, $name2);

foreach ($names as $name){
    $sum_name = 0.00;
    foreach ($name->hours as $value){
        $sum_name = $sum_name + $value;
    }
    echo($sum_name . " hours " . $name->name);
    echo("<br>");
}
?>
...