我有一个像这样的PHP数组..
Array
(
[04] => 1
[09] => 1
[10] => 1
[01] => 1
)
我想确保它中有1-10键,如果它们不存在,那么我希望它们的值为0,所以我的最终数组看起来像这样......
Array
(
[01] => 1
[02] => 0
[03] => 0
[04] => 1
[05] => 0
[06] => 0
[07] => 0
[08] => 0
[09] => 1
[10] => 1
)
我这样做..
if (!array_key_exists("01",$myarray)) {
$myarray['01'] = 0;
}
if (!array_key_exists("02",$myarray)) {
$myarray['02'] = 0;
}
if (!array_key_exists("02",$myarray)) {
$myarray['02'] = 0;
}
if (!array_key_exists("03",$myarray)) {
$myarray['03'] = 0;
}
依此类推,直到10岁,然后我按照正确的顺序进行ksort
ksort($myarray)
这有效,但我知道这很笨重,可能效率不高。
有人能指出我更好的解决方案吗?
答案 0 :(得分:3)
只需使用像这样的for循环
For($i = 1;$i<=10;$i++){
$index = (string)sprintf("%02d",$i);
if (!array_key_exists($index,$myarray)) {
$myarray[$index] = 0;
}
}
我希望它有所帮助。
答案 1 :(得分:2)
您可以使用简单的for
循环:
$myarray = array(
1 => 1,
2 => 1,
3 => 1);
for ($i = 1; $i < 11; $i++) {
if (!isset($myarray[$i]))
$myarray[$i] = 0;
}
print_r($myarray);
/* Output :
Array ( [1] => 1 [2] => 1 [3] => 1 [4] => 0
[5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 )
*/
答案 2 :(得分:1)
您可以构建一个空白数组(使用array_fill()
),然后使用array_replace()
用您之后的值覆盖空白...
$myarray = array(
4 => 1,
9 => 1,
10 => 1,
1 => 1
);
$blank = array_fill(1, 10, 0);
$result = array_replace ($blank, $myarray);
print_r($result);
哪些输出......
Array
(
[1] => 1
[2] => 0
[3] => 0
[4] => 1
[5] => 0
[6] => 0
[7] => 0
[8] => 0
[9] => 1
[10] => 1
)
答案 3 :(得分:1)
尝试这个简单的事情
$array=Array
(
[04] => 1
[09] => 1
[10] => 1
[01] => 1
);
$myarray=Array
(
[01] => 0
[02] => 0
[03] => 0
[04] => 0
[05] => 0
[06] => 0
[07] => 0
[08] => 0
[09] => 0
[10] => 0
);
foreach ($array as $key => $value){
$myarray[$key]=$value;
}
答案 4 :(得分:1)
您可以使用array_replace和array_fill_keys创建一个预填充数组,其中键为前导零,值为0:
$result = array_replace(
array_fill_keys(["01", "02", "03", "04", "05", "06", "07", "08", "09", "10"], 0),
["04" => 1, "09" => 1, "10" => 1, "01" => 1]
);
print_r($result)
那会给你:
Array
(
[01] => 1
[02] => 0
[03] => 0
[04] => 1
[05] => 0
[06] => 0
[07] => 0
[08] => 0
[09] => 1
[10] => 1
)
您还可以使用范围来创建带有键的数组:
$result = array_replace(
array_fill_keys(
array_map(
function ($x) {
return sprintf("%02d", $x);
},
range(1, 10, 1)
), 0), ["04" => 1, "09" => 1, "10" => 1, "01" => 1]);
print_r($result);
答案 5 :(得分:0)
使用功能技术最终会使您的过程看起来很复杂。选择正确解决方案的重要因素应该是省略ksort()
调用。如果正确设计了编码解决方案,则可以按照所需的顺序存储数据,从头开始-迭代后无需清理。
代码:(Demo)
$data = ["04" => 1, "09" => 1, "10" => 1, "01" => 1];
for ($x = 1; $x < 11; ++$x) {
$key = sprintf("%02d", $x); // ensure proper padding with 0
$result[$key] = $data[$key] ?? 0; // null coalescing operator from php5.6+
}
print_r($result);
输出:
Array
(
[01] => 1
[02] => 0
[03] => 0
[04] => 1
[05] => 0
[06] => 0
[07] => 0
[08] => 0
[09] => 1
[10] => 1
)