2015-06-15 3 views
1

Я пытаюсь заполнить массив в PHP следующим образом:Заполнение 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 
    ) 

) 

I также попытался изменить: "$ целевых =" на "$ цели [] =", однако он производит этот выход:

[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 
    ) 

)

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

Спасибо!

+2

'$ цели [] = ...' вы переназначение '$ targets' переменной в каждом цикле, а не добавляя к нему – Ankh

+0

Я тоже это пробовал, но он также не дает мне правильный результат, см. Обновленный вопрос. – datether

+1

В этом случае вам нужны $ target [$ url] = array (CURLOPT_TIMEOUT => 10); ' – Ankh

ответ

0

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

$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); 
0

Как просто, как меняется тело цикла к:

$targets[] = array(// <-- NOTE THE [] 
     $url => array(
       CURLOPT_TIMEOUT => 10 
     ), 
); 
+0

Спасибо за ваш вклад – datether

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

Используйте [], чтобы добавить массив в $targets вместо перезаписи.

+0

Спасибо за ваш вклад – datether

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

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

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

} 

использование целей [], чтобы создать новый массив, каждый цикл

0

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

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

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

Спасибо за ваш вклад – datether

Смежные вопросы