PHP - Как рассчитать значения второго foreach l oop? - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть код, который я пытаюсь заставить работать, но я просто не могу! У меня есть 2 массива: 1-> Diares 2-> Значение соответствует каждой записи в дневнике.

$diarioNum =  array( [0] => 1 [1] => 2 [2] => 1 [3] => 3 [4] => 5 [5] => 1 [6] => 1 );
$vintoBookSX = array( [0] => -0.5 [1] => -0.4 [2] => -0.6 [3] => -0.4 [4] => -0.4 [5] => -1 [6] => -1 );

В моем случае у меня есть несколько дневников и в базе данных, из которой я экстраполирую данные, не в порядке , поэтому я должен был сделать этот код:

<?php
    $con = array_count_values($diarioNum);
    foreach ($con as $key => $value) {  
     $pos = array_keys($diarioNum, $key);
     echo "Diario " .$key. "<br>";
      foreach ($pos as $ke => $val) {
        $vBKsx = $vintoBookSX[$val];
        echo $vBKsx . "<br>";       
      } 
   }
?>

Вывод:

Diario 1
-0.5
-0.6
-1
-1
Diario 2
-0.4
Diario 3
-0.4
Diario 5
-0.4

моя таблица базы данных: моя таблица базы данных

Теперь я должны суммировать значения для каждого дневника. И тогда выведите:

Diario 1
-3.1
Diario 2
-0.4
Diario 3
-0.4
Diario 5
-0.4

Можете ли вы мне помочь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Вот еще одно решение

$diarioNum =  array(1, 2, 1, 3, 5, 1, 1 );
$vintoBookSX = array(-0.5, -0.4, -0.6, -0.4, -0.4, -1, -1 );

$result = array_fill_keys( array_unique($diarioNum), 0);

foreach ( $diarioNum as $key => $val ) {
    $result[ $val ] += $vintoBookSX[ $key ];
}
foreach ( $result as $key => $val ) {
    echo "Diario $key <br>";
    echo $val . "<br>";
}
0 голосов
/ 04 апреля 2020

Вы, кажется, используете сложный способ сделать это, вот как я это сделаю (со стороны PHP):

$diarioNum =  [ 1, 2, 1, 3, 5, 1, 1 ];
$vintoBookSX = [ -0.5, -0.4, -0.6, -0.4, -0.4, -1, -1 ];

$result = [];

foreach ($diarioNum as $k => $day) {
    $result[$day][] = $vintoBookSX[$k];
}

print_r($result);

$sums = array_map('array_sum', $result);

print_r($sums);

демо

Вероятно, есть лучший способ сделать это на стороне СУБД. Что-то вроде:

SELECT diarioNumero, SUM(VintoBook_SX)
FROM yourtable
GROUP BY diarioNumero
ORDER BY diarioNumero
...