2011-09-18 73 views
0

我想插入一个阵列内的元素,但不能覆盖任何现有的要素:获取下一个空元素的数组中,而迭代

$to_insert = 25; 
$elem = 'new'; 

$arr = array(
    5 => 'abc', 
10 => 'def', 
12 => 'xyz', 
25 => 'dontoverwrite', 
30 => 'fff', 
); 

foreach($arr as $index => $val){ 
    if($to_insert == $index){ 
    // here get next free index, in this case would be 26; 
    $arr[$the_free_index] = $elem; 
    } 
} 

我怎么能这样做?

回答

4

你想要一个简单的循环,从$to_insert开始,增加循环变量,直到它找到尚不值作为$arr中的关键字存在。所以,你可以使用forarray_key_exists

for($i = $to_insert; array_key_exists($i, $arr); ++$i) ; 
$arr[$i] = $elem; 

这将正确地插入元素时,双方$to_insert键存在,当它没有。

See it in action

1

下面的代码将寻找下一个指标不使用时,开始在$to_insert

$to_insert = 25; 
$elem = 'new'; 

for($i = $to_insert; ; $i++) 
{ 
    if(!isset($arr[$i])) 
    { 
     $arr[$i] = $elem; 
     break; 
    } 
}