我有一个这样的数组,其中一些键缺失:
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"
}
$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);
你的问题非常含糊,很难确切地理解你的意思。从我的理解来看,你想将一个键插入到数组中,同时移动当前键沿着索引线。
你可以尝试以下代码:
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);
end($array)
返回最后一个 _值_,key()
期望一个数组 -- 这段代码会抛出一个错误:PHP Warning: key() expects parameter 1 to be array, string given
。 - Gregksort
可以对其进行重新排序,这可能会很有用。 - roibeart$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] = '';
}
}
end
没有意义。请使用 max
,这样你就可以得到最高的键。 - user5147563<?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);
$array
中缺失的键,使其具有默认值$defaultVal
——而不需要事先对任何内容进行排序,同时仍然能够得到排序后的结果。// 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
,因为我们知道数组的大小,这样可以显著减少资源的使用。 如果您不想让其他值为null
,则必须用显式循环替换array_fill
部分来设置SplFixedArray的其他值(遗憾的是,无法传递预填充值给构造函数)。
像其他的数组赋值一样:
$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);
编辑:添加了排序以避免删除值。
2
。 - krtek你可以根据键定义数组值。
$array[1] = ''
<?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);
?>
ksort($u)
并且使用min(...)
的代替值为0
,则这是最佳答案:键的顺序将得以保留,并且不会假设最大键位于哪里。缺点:性能不确定,而且不是最直观的解决方案。总之:$t + array_fill_keys(range(0,max(array_keys($t))),'')
。 - zamnuts