PHP从循环生成Array()?

Posted

技术标签:

【中文标题】PHP从循环生成Array()?【英文标题】:PHP Generate Array() from loop? 【发布时间】: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'));

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于PHP从循环生成Array()?的主要内容,如果未能解决你的问题,请参考以下文章

从数据数组(php,mysql)编写循环sql查询

php页面数组循环问题

从php while循环生成数组

在 PHP 中满足某个条件时如何停止递归循环

PHP循环遍历多维数组并更改值

如何在不使用PHP的循环的情况下获取对象数组的索引