2011-03-16 125 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