Array_sum, кажется, не работает должным образом Php

Я играю с лигой легенд $api и асинхронными запросами, но сейчас у меня проблема, я не могу сумма всех убийств с идентификатора участника == 1

array_sum показывает только убийства из каждой игры, а не сумму всех (скриншот) ожидаемый результат должен быть 122 (сумма всех убийств участника с идентификатором 1)

это мой код:

<?php



// Function to be called on request success
 $onSuccess = function (Objects\MatchDto  $match) {

  foreach ($match->participants as $team) {
       
        if ($team->participantId==1 and $team->teamId==100) {
            
              $t[]=$team->stats->kills.'</br>';
              var_dump (array_sum($t)); echo '</br>';

        }    
    } 


};
// Function to be called on request failure
$onFailure = function ($ex) {
    echo "Error occured: {$ex->getMessage()}";
};

 //I have a bunch of match_ids from league of legends games saved in my db
 // so,  foreach $custom is to get all match_ids
 // $api variable is an array with all initializtion settings
 // $match is basically getting me the match with that matchid from my db ex: getMatch('1234567')

    foreach ($custom as $games) {
    
    $api->nextAsync($onSuccess, $onFailure);

    $match=$api->getMatch($games->match_id);
    
}



$api->commitAsync();



?>

это то, что возвращает мне array_sum вместо ожидаемого результата 122.

Почему это ожидается? Вы суммируете и сбрасываете каждый раз, когда выполняете итерацию (это подсказка, переместите его за пределы foreach)

TCooper 10.12.2020 02:25

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

Lucas Ln 10.12.2020 02:26

Вы не инициализируете $t до того, как начнете вводить в него значения. Затем вы объединяете строку с каждым значением перед добавлением ее в массив, гарантируя, что у вас есть массив строк для сложения. По правилам PHP это может работать, но я бы не стал на это полагаться.

user9613905 10.12.2020 02:27

Вы должны инициализировать $t выше/снаружи foreach и array_sum ниже foreach и удалить строку `<br>'

Donkarnash 10.12.2020 02:27

но я могу только инициализировать $t внутри этого foreach;

Lucas Ln 10.12.2020 02:29

И почему так? Что такое принуждение

Donkarnash 10.12.2020 02:30
array_sum работает нормально. для простоты вам это даже не нужно. простого суммирования $t = 0; и $t += kills должно быть достаточно.
Kevin 10.12.2020 02:31

@ Кевин, очень хороший момент, я обновляю ответ, чтобы отразить эту лучшую альтернативу.

TCooper 10.12.2020 02:32

я получаю точно такой же результат, как и раньше, я не знаю почему, но я заметил, что foreach с $custom проходит через функцию $onsucess, если я стираю все в функции $onsuccess и эхо просто " test", он выводит 33 "test", точно такое же количество совпадений, которое у меня есть в моей базе данных.

Lucas Ln 10.12.2020 02:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
139
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
<?php

    $onSuccess = function(Objects\MatchDto  $match, &$t){
        foreach ($match->participants as $team){
            if ($team->participantId==1 and $team->teamId==100){
                  $t+=$team->stats->kills;
            }    
        }
    };

    $onFailure = function($ex){
        echo "Error occurred: {$ex->getMessage()}";
    };
    $t = 0;
    foreach($custom as $games){
        $api->nextAsync($onSuccess, $onFailure);
        $match=$api->getMatch($games->match_id);
    }
    $api->commitAsync();
    echo $t."<br>";

?>    

Дайте мне знать, как это происходит для вас. Раньше я не обращал внимания, чтобы заметить, что вы также перебираете несколько совпадений (onSuccess вызывается несколько раз).

я получаю тот же результат, что и раньше, я не знаю, почему

Lucas Ln 10.12.2020 02:38

но я заметил, что foreach с $custom проходит через функцию $onsucess, если я стираю все в функции $onsuccess и эхо просто "тест", он печатает 33 "тест", точный такое же количество совпадений, которое у меня есть в моей базе данных

Lucas Ln 10.12.2020 02:49

Я на самом деле неправильно прочитал ваш код раньше, мои извинения. обновленный ответ скоро появится.

TCooper 14.12.2020 19:12

скоро ~= 5 часов, я думаю. но см. обновление, если все еще необходимо

TCooper 15.12.2020 00:36

Другие вопросы по теме