2013-04-24 62 views
4

消失我通过邮局去 - php - array_fill negative indices数组索引与array_fill PHP

PHP肯定不说为什么它从0开始的(-ive)START_INDEX后,但却但是,如果我从尝试array_fill-2已经有-10索引定义的数组的索引,原始数组消失。

$a = array('-1'=>'harry','0'=>'alex'); 
$a = array_fill(-2,4,'roger'); 

print_r($a); 

输出

Array ([-2] => Roger [0] => Roger [1] => Roger [2] => Roger) 

$a[-1]是一个未定义的偏移误差。 $a[0]被覆盖到罗杰。

任何解释?并为未来类似的情况工作技巧..!

回答

1

您可以尝试array_replace

$a = array('-1'=>'harry','0'=>'alex'); 
$b = array_fill(-2, 4, 'Roger'); 

$c = array_replace($b, $a); 
ksort($c); 
print_r($c); 

输出

Array 
(
    [-2] => Roger 
    [-1] => harry 
    [0] => alex 
    [1] => Roger 
    [2] => Roger 
) 
1

array_fill手册:

如果START_INDEX是否定的,返回的数组的第一个指数将START_INDEX和下面的索引将从零开始(参见实施例)。

<?php 
$a = array_fill(5, 6, 'banana'); 
$b = array_fill(-2, 4, 'pear'); 
print_r($a); 
print_r($b); 
?> 

输出:

Array 
(
    [5] => banana 
    [6] => banana 
    [7] => banana 
    [8] => banana 
    [9] => banana 
    [10] => banana 
) 
Array 
(
    [-2] => pear 
    [0] => pear 
    [1] => pear 
    [2] => pear 
) 

所以你的输出是正确的。接下来的事是你正在省略第一个数组。你应该尝试:

$a = array(-1 => 'harry', 0 => 'alex'); 
$a = array_merge(array_fill(-2, 4, 'roger'), $a); 

ksort($a); 
+0

如果处理动态数组最后的输出将会再次被排序 – Mayur 2013-04-24 08:52:31

+0

@Mayur看看我的编辑。 – hsz 2013-04-24 08:56:48

+0

索引关联没有维护 – Mayur 2013-04-24 09:25:16

0

这是正确的方法

$a = array('-1'=>'harry','0'=>'alex'); 
$a = array_merge($a,array_fill(-2,4,'roger')); 

print_r($a); 

如果ARRK键必须保留

$a = array('-1'=>'harry','0'=>'alex'); 
$b=array_fill('-2','4','roger'); 
    $a = $a+ $b; 

    print_r($a); 
+1

它仍然会覆盖'0'索引。 – hsz 2013-04-24 08:39:56

+0

要小心什么你合并了什么...这里的顺序是非常重要的... – shadyyx 2013-04-24 08:44:19

+0

正确的解决方案发布 – 2013-04-24 08:45:47