在php中的foreach循环中增加数组元素?

时间:2014-03-26 06:57:00

标签: php arrays php-internals

请考虑以下代码:

<?php
$arr = array();
$arr['b'] = 'book';
foreach($arr as $key=>$val) {
   print "key=>$key\n";
   if(!isset($arr['a']))
      $arr['a'] = 'apple';
}
?>

没有显示'a'。 foreach如何使用hash-table(数组)来遍历每个元素。如果实现列表,为什么我不能在运行时添加更多?

请不要告诉我,我可以使用基于数字的索引来帮助计算。

6 个答案:

答案 0 :(得分:2)

Foreach在循环(read more)之前复制数组的结构,因此您无法更改数组的结构并等待循环内的新元素。您可以使用while代替foreach

$arr = array();
$arr['b'] = 'book';

reset($arr);
while ($val = current($arr))
    {
    print "key=".key($arr).PHP_EOL;
    if (!isset($arr['a']))
        $arr['a'] = 'apple';
    next($arr);
    }

或者使用ArrayIterator和foreach,因为ArrayIterator不是数组。

$arr = array();
$arr['b'] = 'book';

$array_iterator = new ArrayIterator($arr);


foreach($array_iterator as $key=>$val) {
   print "key=>$key\n";
   if(!isset($array_iterator['a']))
      $array_iterator['a'] = 'apple';
}

答案 1 :(得分:0)

我认为你需要存储数组元素继续狡猾

尝试

<?php
$arr = array();
$arr['b'] = 'book';
foreach($arr as $key=>$val) {
   print "key=>$key\n";
   if(!isset($arr['a']))
      $arr['a'][] = 'apple';
}
print_r($arr);
?>

答案 2 :(得分:0)

为了能够直接修改循环中的数组元素,在$ value之前加上&amp ;.在这种情况下,该值将通过引用分配。

http://cz2.php.net/manual/en/control-structures.foreach.php

答案 3 :(得分:-1)

试试这个:

你会得到价值。

<?php
$arr = array();
$arr['b'] = 'book';
foreach($arr as $key=>$val) {
   print "key=>$key\n";
   if(!isset($arr['a']))
      $arr['a'] = 'apple';
}

echo '<pre>';
print_r($arr);

?>

<强>输出:

key=>b
<pre>Array
(
    [b] => book
    [a] => apple
)

答案 4 :(得分:-1)

如果要在数组中检查是否存在密钥,请使用array_key_exists函数

例如:

<?php
$arr = array();
$arr['b'] = 'book';
print_r($arr);          // prints Array ( [b] => book ) 
if(!array_key_exists("a",$arr))
      $arr['a'] = 'apple';
print_r($arr);         // prints Array ( [b] => book [a] => apple )
?>

如果您想使用isset条件,请尝试以下操作:

$arr = array();
$arr['b'] = 'book';
$flag = 0;
foreach($arr as $key=>$val) {
   print "key=>$key\n";
   if(!isset($arr["a"]))
   {
        $flag = 1;
   }
}
if(flag)
{
     $arr['a'] = 'apple';
}

print_r($arr);

答案 5 :(得分:-1)

如何使用for和realtime array_keys()?

<?php
$arr = array();
$arr['b'] = 'book';

for ($x=0;$x<count($arr); $x++) {
   $keys = array_keys($arr);
   $key = $keys[$x];
   print "key=>$key\n";
   if(!isset($arr['a']))
      $arr['a'] = 'apple';
}