4

我浏览了帖子 - php - array_fill 负索引

PHP 肯定没有说明为什么它在 (-ive) start_index 之后从 0 开始,但是,但是,如果我尝试array_fill-2已经定义了索引的数组的-1索引开始0,原始数组就会消失。

$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]被罗杰覆盖。

有什么解释吗??以及未来类似情况的工作提示..!!

4

3 回答 3

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);
于 2013-04-24T08:36:30.663 回答
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 
)
于 2013-04-24T08:46:26.047 回答
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);
于 2013-04-24T08:37:06.267 回答