考虑以下代码:
<?php
$arr = array();
$arr['b'] = 'book';
foreach($arr as $key=>$val) {
print "key=>$key'n";
if(!isset($arr['a']))
$arr['a'] = 'apple';
}
?>
不显示'a'。foreach如何与哈希表(数组)一起工作,遍历每个元素。如果列表是可实现的,为什么我不能在运行时添加更多?
请不要告诉我,我可以在计数的帮助下完成基于数字的索引的任务。
Foreach在循环之前复制数组的结构(了解更多),所以你不能改变数组的结构并等待循环中的新元素。你可以用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';
}
我认为你需要存储数组元素continue sly
<?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);
?>
为了能够直接在$value前面的循环中修改数组元素&在这种情况下,值将通过引用赋值。
http://cz2.php.net/manual/en/control-structures.foreach.php试试这个:
你将得到值
<?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
)
如果要检查数组中key是否存在,请使用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);
如何使用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';
}