【问题标题】:Filling PHP array with "for" loop用“for”循环填充 PHP 数组
【发布时间】:2015-06-15 07:34:56
【问题描述】:

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

)

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

谢谢!

【问题讨论】:

  • $targets[] = ... 您在每个循环中重新分配 $targets 变量,而不是添加到它
  • 我也试过了,但它也没有给我正确的输出,请参阅更新的问题。
  • 在这种情况下你想要$targets[$url] = array(CURLOPT_TIMEOUT =&gt; 10);

标签: php arrays for-loop population


【解决方案1】:

试试这个代码:

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

【讨论】:

    【解决方案2】:

    就像将循环体更改为:

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

    【讨论】:

    • 感谢您的贡献
    【解决方案3】:
    $targets[] = array(
            $url => array(
                    CURLOPT_TIMEOUT => 10
            ),
    );
    

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

    【讨论】:

    • 感谢您的贡献
    【解决方案4】:
    $targets = array();
    for ($i = 0; $i <= $maxPages; $i++) {
    
      $url = 'http://127.0.0.1/?page='.$i;
    
      **$targets[]** =  array(
            $url => array(
                    CURLOPT_TIMEOUT => 10
            ),
      );
    
    }
    

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

    【讨论】:

      【解决方案5】:

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

      然后我们发现您需要将$targets 的键设置为$url,以便通过在方括号[$url] 中添加$url 来轻松解决此问题。这给了我们:

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

      【讨论】:

      • 感谢您的贡献
      猜你喜欢
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多