我有一个像这样的数组,缺少键:
array(2) {
[0]=>
string(4) "Bill"
[2]=>
string(13) "billy@kid.com"
}
如何使用空字符串作为值添加缺失键?我希望这样做:
array(3) {
[0]=>
string(4) "Bill"
[1]=>
string(0) ""
[2]=>
string(13) "billy@kid.com"
}
答案 0 :(得分: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 :(得分:7)
与Rinuwise的答案类似:
$t = array( 0 => "Bill",
2 => "billy@kid.com"
);
$u = $t + array_fill_keys( range(min(array_keys($t)),
max(array_keys($t))
),
''
);
ksort($u);
var_dump($u);
答案 2 :(得分: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] = '';
}
}
答案 3 :(得分:5)
这里有一个不同的答案,如何在没有循环的情况下利用数组求和运算符。
<?php
$array = array(
0 => "Bill",
2 => "billy@kid.com",
);
// 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);
答案 4 :(得分: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);
编辑:添加排序以避免删除值。
答案 5 :(得分:1)
这个问题已经很老了 - 但我认为我们可以做得比给定的答案好一点,通过提供三行解决方案来用 $array
填充数字索引的 $defaultVal
- 无需先对任何内容进行排序 - 并且仍然得到排序结果。
此外,我们只执行与原始数组中的条目一样多的循环迭代 - 并将可能更大的缺失索引集的生成留给内部 php c 代码,它可以比我们更好地优化其功能可以优化我们的用户态代码。
// array_fill generates a sorted array,
// we merely overwrite its values at certain indices.
// Thus, $newArray will end up sorted,
// even if $array wasn't
$newArray = array_fill(0, max(array_keys($array)), $defaultVal);
foreach ($array as $key => $val) {
$newArray[$key] = $val;
}
如果您在巨大数组或大量迭代的上下文中需要这样的东西 - 您也可以从使用 SplFixedArray
中受益,我们可以使用它,因为我们知道数组的大小 - 这非常重要更加资源友好。如果您不想将 SplFixedArray 的其他值设置为 array_fill
,则必须通过显式循环替换 null
部分(遗憾的是,不能将 prefillValue 传递给构造函数) ).
答案 6 :(得分:0)
您可以根据键定义数组值。
$array[1] = ''
答案 7 :(得分: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 => 'billy@kid.com');
$array1 = array_fill_empty($array1);
var_dump($array1);
?>