2011-03-16 41 views

回答

7

你的問題很模糊,很難理解你想要什麼,從我的理解,似乎要插入一個鍵入陣列,沿索引線移動當前鍵。

你可能想嘗試這樣的:

function cleanArray(&$array) 
{ 
    end($array); 
    $max = key($array); //Get the final key as max! 
    for($i = 0; $i < $max; $i++) 
    { 
     if(!isset($array[$i])) 
     { 
      $array[$i] = ''; 
     } 
    } 
} 

cleanArray($array); 
+1

'end($ array)'返回最後一個_value_,'key()'需要一個數組 - 此代碼拋出一個錯誤:'PHP Warning:key()expect parameter 1 is array,string given' – Greg 2015-02-20 11:46:34

0

您可以根據密鑰定義一個數組值。

$array[1] = ''

+0

如果還有空鍵不計其數什麼? – fabrik 2011-03-16 14:10:21

+1

我認爲他正在思考更多的動態實現這一點。 – 2011-03-16 14:11:06

+0

我是基於他的示例數組。 – mikelbring 2011-03-16 14:11:22

1

像其他數組做作:

$myarray[1] = ""; 

或者,如果你的意思是填補了數組中的差距:

$i = 0; 
ksort($myarray); 
foreach($myarray as $k => $v) { 
    while($i < $k) { 
     // if $i < $k we're missing some keys. 
     $myarray[$i] = ''; 
     $i ++; 
    } 
    $i++; 
} 
ksort($myarray); 

編輯:增加了排序,以避免刪除值。

+0

然後這將刪除電子郵件地址。 – RobertPitt 2011-03-16 14:12:42

+0

@RobertPitt不,電子郵件地址有一個關鍵'2' – krtek 2011-03-16 14:14:58

+0

而在foreach中呢?雙倍遞增$ i呢? – fabrik 2011-03-16 14:18:18

6

如果要自動設置空鍵,你可以做

$keys = array_keys($array); 

$maxkey = end($keys); // it will fill only the values between 0 and last key 

for ($i = 0; $i < $maxkey; $i++) { 
    if (!array_key_exists($i, $array)) { 
     $array[$i] = ''; 
    } 
} 
+0

如果數組鍵未按升序排序,該怎麼辦? – BoltClock 2011-03-16 14:16:25

+0

使用foreach循環代替 – 2011-03-16 14:21:31

+2

json他沒有循環陣列,他循環的鍵大小,有完全不同! – RobertPitt 2011-03-16 14:22:41

0
<?php 

function array_fill_empty($array, $default = "") { 
    if(!is_array($array)) return array(); 
    for($i = 0; $i < count($array); $i++) { 
     if(!isset($array[$i])) $array[$i] = $default; 
    } 
    return $array; 
} 

$array1 = array(0 => 'Bill', 2 => '[email protected]'); 
$array1 = array_fill_empty($array1); 
var_dump($array1); 

?> 
+0

應該只是測試它...大聲笑對不起留下測試代碼在那裏 – 2011-03-16 14:18:17

+0

好戲:P我不會想到這一點。 – krtek 2011-03-16 14:22:54

5

下面是關於如何做到這一點,而不採取的陣列和運營商的優勢,循環有點不同的答案。

<?php 

$array = array(
    0 => "Bill", 
    2 => "[email protected]", 
); 

// If min and max are static, use numbers instead of getting them from the array 
$keys = array_keys($array); 
$all = array_fill(min($keys), max($keys) - min($keys) + 1, ""); 
$filled = $array + $all; 

// If you want keys in order 
ksort($filled); 

var_dump($filled); 
6

到Rinuwise的答案類似:

$t = array(0 => "Bill", 
      2 => "[email protected]" 
     ); 


$u = $t + array_fill_keys(range(min(array_keys($t)), 
           max(array_keys($t)) 
           ), 
          '' 
          ); 

ksort($u); 

var_dump($u); 
+2

if you omit 'ksort($ u)'並使用'0'而不是'min(...)'這是*最好的*答案:保持鍵順序並且不假定最大鍵所在的位置。缺點:不確定性能,而不是最直觀的解決方案。總結:'$ t + array_fill_keys(range(0,max(array_keys($ t))),'')' – zamnuts 2014-03-05 13:38:21