2013-04-24 59 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