【问题标题】:PHP Generate Array() from loop?PHP从循环生成Array()?
【发布时间】:2011-07-18 13:28:46
【问题描述】:

我刚刚写了这个,这是将数组添加到预先存在的数组的最有效方法吗?


$c=4;
$i=1;
$myarray = array();

while($i <= $c):
    array_push($myarray, array('key' => 'value'));
    $i++;
endwhile;

echo '<pre><code>';
var_dump($myarray);
echo '</code></pre>';

更新:如何在不创建新数组的情况下推送键和值。
所以这个array_push($myarray,'key' =&gt; 'value');
不是这个array_push($myarray, array('key' =&gt; 'value'));

【问题讨论】:

    标签: php arrays while-loop


    【解决方案1】:

    您的代码有一些可以改进的地方:

    幻数

    分配像 4 和 1 这样的幻数是一种不好的做法,请改用常量。对于这个例子来说,这当然是矫枉过正,但了解和使用仍然很重要。

    缺少大括号

    始终使用大括号,它使代码更具可读性。

    while循环的错误使用

    这不是while循环的情况,如果你想循环一定次数,总是使用for循环!

    array_push 的不必要使用

    您不需要数组推送来向数组添加元素,您可以并且应该使用速记函数。

    结果

    define('START', 1);
    define('END', 4);
    
    $myArray = array();
    
    
    for ($i = START; $i < END; $i++)
    {
        $myArray[] = array('item' => '1 items');
    }
    

    【讨论】:

    • 不要Always use the curly braces,在添加内联 PHP 代码时使用替代语法,否则你只会让试图找出哪个花括号关闭哪个块的人感到沮丧。 (因为团队中总有人编辑在代码中放置随机选项卡)
    • @mhitza:确实。不过,内联 PHP 代码不应该经常发生。
    • @markus ,我怎样才能对 foreach 做同样的事情。如果你能帮忙就太好了。谢谢
    【解决方案2】:

    查看您的代码,我会亲自执行以下操作:

    $myarray = array();
    for($i=0;$i<4;$i++){
      $myarray[] = array('item' => '1 items');
    }      
    

    根据this,array_push 的效率比$myarray[] 略低

    【讨论】:

      【解决方案3】:

      如果您真的只需要从某个索引开始将某个值 n 次放入数组中,您可以使用 array_fill:

      $myarray = array_fill($i, $c, array('item' => '1 items'));
      

      【讨论】:

        【解决方案4】:

        您的示例对我来说看起来不错,尽管您很可能会将您的 array_push 函数调用替换为:

        $myarray[] = array('item' => '1 items');
        

        哪个“是”array_push 的简写语法。

        更新: 对于关联数组,您只需这样做:

        $myarray["item"] = "1 items";
        

        尽管在您的示例中,您只会在每次迭代时覆盖该值。

        【讨论】:

        • 听起来不错,如果我只想添加项目而不是数组,我可以执行 $myarray[] = 'item' , '1 items'; / 正确吗?
        • @kr1zmo:您可能会收到该代码的错误。也许你的意思是$myarray['item'] = '1 items'
        • 不,每个作业都是独立的。
        • 如何将它推入数组 'item' => '1 items' 而不创建一个全新的数组来放置它而不是这个数组('item' => '1 items')
        • 我不明白这个问题。
        【解决方案5】:
        for($i=1; $i < 10; $i++) {
            $option[$i] = $i;
        }
        

        【讨论】:

          猜你喜欢
          • 2012-02-24
          • 1970-01-01
          • 2018-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多