1

我正在尝试在 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
    )

)

我也尝试将“$targets =”更改为“$targets[] =”,但它会产生以下输出:

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

)

可能是一个简单的修复,但我无法看到它。有更多知识的人可以指出我的错误吗?

谢谢 !

4

5 回答 5

0

就像将循环体更改为一样简单:

$targets[] =  array( // <-- NOTE THE []
        $url => array(
                CURLOPT_TIMEOUT => 10
        ),
);
于 2015-06-15T07:37:32.793 回答
0
$targets[] = array(
        $url => array(
                CURLOPT_TIMEOUT => 10
        ),
);

用于[]将数组追加到$targets而不是覆盖。

于 2015-06-15T07:38:14.110 回答
0
$targets = array();
for ($i = 0; $i <= $maxPages; $i++) {

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

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

}

使用 targets[] 在每个循环中创建一个新数组

于 2015-06-15T07:40:02.117 回答
0

因此,根据我们在评论中的推论:您的第一个问题是您在循环中重新分配变量,而不是使用符号$targets附加到数组中。[]

然后我们发现您需要将键设置为$targets,以便通过添加方括号$url轻松修复。这给了我们:$url[$url]

$targets[$url] = array(
    CURLOPT_TIMEOUT => 10
);
于 2015-06-15T08:00:59.573 回答
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);
于 2015-06-15T09:23:50.460 回答