Increasing array elements while in foreach loop in php? [duplicate]

℡╲_俬逩灬. 提交于 2019-12-10 14:54:18

问题


Consider the code below:

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

It is not displaying 'a'. How foreach works with hash-table(array), to traverse each element. If lists are implement why can't I add more at run time ?

Please don't tell me that I could do this task with numeric based index with help of counting.


回答1:


Foreach copies structure of array before looping(read more), so you cannot change structure of array and wait for new elements inside loop. You could use while instead of 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);
    }

Or use ArrayIterator with foreach, because ArrayIterator is not an array.

$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';
}



回答2:


I think you need to store array element continue sly

Try

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



回答3:


In order to be able to directly modify array elements within the loop precede $value with &. In that case the value will be assigned by reference.

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




回答4:


Try this:

You will get values.

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

?>

Output:

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



回答5:


If you want to check key exist or not in array use array_key_exists function

Eg:

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

If you want to use isset condition try like this:

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



回答6:


How about using for and 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';
}


来源:https://stackoverflow.com/questions/22653657/increasing-array-elements-while-in-foreach-loop-in-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!