Обработка нескольких переменных в одной функции PHP - PullRequest
2 голосов
/ 05 апреля 2020

Я довольно новичок и мне нужно руководство, как подойти к простой проблеме.

Я создаю приложение в PHP, чтобы разрешить различные виды данных команды Fantasy Premier League (FPL). Я извлекаю данные из API (массив JSON), перебираю их и сохраняю в БД. Для одного из вызовов API требуется team_id, чтобы вытащить соответствующих игроков этой команды.

Вначале я хотел написать функцию, которая принимает team_id в качестве аргумента, а затем анализирует данные для вставки в базу данных. Но как бы я передал каждую из 12 различных team_id с обрабатываемой функции без повторения функции 12 раз для каждого team_id?

Итак, я мог бы иметь:

$team_id_1 = 1;
$team_id_2 = 2;
$team_id_3 = 3;
etc...

Тогда моя функция может быть:

function insert_team_data($team_id) {

$fplUrl = 'https://fantasy.premierleague.com/api/entry/' . $team_id . '/event/29/picks/';

foreach ($team_data as $key => $value) {
    # code...
}

$sql = "INSERT INTO ..."

}

Можно ли сконструировать это так, чтобы каждый team_id передавался функции итеративно в одном процессе (т.е. без повторения кода функции для каждого team_id)? Буду ли я создавать массив из team_id s и иметь функцию l oop через каждую, а затем l oop через данные каждой результирующей команды?

1 Ответ

2 голосов
/ 05 апреля 2020

Да, вы можете сделать: использовать массив или variadi c function .

То, как вы думаете об этом, - вот что называется функцией variadi c или функцией переменной длины.

Этого можно достичь с помощью оператора func_get_args() или splat, который обрабатывает упаковку / распаковку аргумента .

Вот пример.

function insert_team_data(... $team_ids) {

    // $team_ids will appear as an array in your function    
    foreach ($team_ids as $team_id) {
        $fplUrl = "https://fantasy.premierleague.com/api/entry/$team_id/event/29/picks/";
        $sql = "INSERT INTO ..."
        // rest of code...
    }


}

Теперь вы можете вызывать функцию следующим образом: insert_team_data(1, 2, 3, 4, 5)

...