Заполнение массива PHP с помощью цикла for

Я пытаюсь заполнить массив в PHP следующим образом:

<?php

$maxPages = 20;

for ($i = 0; $i <= $maxPages; $i++) {

    $url = 'http://127.0.0.1/?page='.$i;

    $targets =  array(
            $url => array(
                    CURLOPT_TIMEOUT => 10
            ),
    );

}

print_r($targets);

?>

Однако кажется, что он отображает только последнее заполненное значение:

Array
(
[http://127.0.0.1/?page=20] => Array
    (
        [13] => 10
    )

)

Я также попытался изменить: " $target =" на "$ target [] = ", однако он выдает следующее:

[0] => Array
    (
        [http://127.0.0.1/?page=0] => Array
            (
                [13] => 10
            )

    )

[1] => Array
    (
        [http://127.0.0.1/?page=1] => Array
            (
                [13] => 10
            )

    )

[2] => Array
    (
        [http://127.0.0.1/?page=2] => Array
            (
                [13] => 10
            )

    )

Хотя мой желаемый результат:

Array
(
[http://127.0.0.1/?page=0] => Array
    (
        [13] => 10
    )

[http://127.0.0.1/?page=1] => Array
    (
        [13] => 10
    )

[http://127.0.0.1/?page=2] => Array
    (
        [13] => 10
    )

)

Возможно, это легко исправить, но я не могу этого увидеть. Может ли кто-то с большим знанием указать мне на мою ошибку?

Спасибо!

5 ответов

Решение

Попробуйте этот код:

$maxPages = 20;
$targets = array();
for ($i = 0; $i <= $maxPages; $i++) {

    $url = 'http://127.0.0.1/?page='.$i;

        $targets[$url] =  array(
            CURLOPT_TIMEOUT => 10
        );

}
echo "<pre>";
print_r($targets);

Итак, из того, что мы вывели в комментариях: Ваша первая проблема в том, что вы переназначаете $targets переменная в цикле, а не добавление в массив с помощью [] нотации.

Затем мы обнаружили, что вам нужно установить ключ $targets быть $url так что это легко исправить, добавив $url в квадратные скобки [$url], Что дает нам:

$targets[$url] = array(
    CURLOPT_TIMEOUT => 10
);
$targets[] = array(
        $url => array(
                CURLOPT_TIMEOUT => 10
        ),
);

использование [] добавить массив к $targets вместо перезаписи.

$targets = array();
for ($i = 0; $i <= $maxPages; $i++) {

  $url = 'http://127.0.0.1/?page='.$i;

  **$targets[]** =  array(
        $url => array(
                CURLOPT_TIMEOUT => 10
        ),
  );

}

использовать цели [] для создания нового массива в каждом цикле

Так же просто, как изменить тело цикла на:

$targets[] =  array( // <-- NOTE THE []
        $url => array(
                CURLOPT_TIMEOUT => 10
        ),
);
Другие вопросы по тегам