我有一个看起来像这样的数组:
array:6 [▼
0 => 2
1 => 2
2 => 2
6 => 5
10 => 3
11 => 1
]
我想检查一系列数字,例如如果我的数组中存在这些键,则为0到11。如果不是,我想用缺少的键创建元素,并给它值0。
所以我最终得到一个像这样的数组:
array:6 [▼
0 => 2
1 => 2
2 => 2
3 => 0
4 => 0
5 => 0
6 => 5
7 => 0
8 => 0
9 => 0
10 => 3
11 => 1
]
我试过这样的事情:
$range = range(0,11);
foreach($myArray as $key => $value){
if(!in_array($key, $range)){
$myArray[$key] = 0;
}
}
但我只是在问题的开头得到了相同的数组。
答案 0 :(得分:3)
您可以使用array_fill_keys()
创建一个数组,并使用range()
将所需的键数传递给它,并用0填充数组。之后,您可以使用array_replace()
替换阵列中已有的所有元素。
<?php
$array = [2 => 3, 5 => 2, 11 => 7];
$result = array_replace(array_fill_keys(range(0, 11), 0), $array);
print_r($result);
?>
您的代码存在的问题是您只能遍历数组的元素。因此,如果您只有3个元素,那么您将遍历这3个元素。
如果要修复当前代码,则必须循环遍历$range
,然后检查数组中是否存在键,而不是值,否则使用其中的值,否则创建元素值为0。
固定代码:
$range = range(0,11);
$result = [];
foreach($range as $key){
if(isset($array[$key]))
$result[$key] = $array[$key];
else
$result[$key] = 0;
}
答案 1 :(得分:1)
如果您的数组键范围仅为11,则可以尝试使用以下代码。
for($i=0; $i<=11;$i++){
if(!array_key_exists($i,$array)){
$array[$i] = 0;
}
}
答案 2 :(得分:0)
使用以下代码。
1)使用key()
我们找到最后一个密钥编号。
2)使用array_key_exists(key,array)
检查密钥是否存在于数组中。
3)将其填入新阵列。
$arr = array(
0 => 2,
1 => 2,
2 => 2,
6 => 5,
10 => 3,
11 => 1,
);
end($arr);
$endKey = key($arr);
for($i=0;$i<$endKey;$i++)
{
if(!array_key_exists($i, $arr))
{
$newarr[$i] = 0;
}
else
{
$newarr[$i] = $arr[$i];
}
}
<强>输出强>
Array
(
[0] => 2
[1] => 2
[2] => 2
[3] => 0
[4] => 0
[5] => 0
[6] => 5
[7] => 0
[8] => 0
[9] => 0
[10] => 3
)
答案 3 :(得分:0)
使用array_diff_key
和array_fill
函数的解决方案:
// $arr is your initial array
$diff = array_diff_key(array_fill(0,12,0), $arr);
$result = $arr + $diff;
ksort($result);
print_r($result);
输出:
Array
(
[0] => 2
[1] => 2
[2] => 2
[3] => 0
[4] => 0
[5] => 0
[6] => 5
[7] => 0
[8] => 0
[9] => 0
[10] => 3
[11] => 1
)
答案 4 :(得分:-1)
你需要浏览整个数组以设置缺失键值0.我为此做了一个函数,检查索引是否缺失然后设置为0.
$array = array('0' => 2, '1' => 2, '2' => 2, '6' => 5, '10' => 3, '11' => 1);
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] = 0;
}
}
}
cleanArray($array);
ksort($array);
print_r($array);