PHP-确保数组包含特定的键
我有一个像这样的PHP数组PHP-确保数组包含特定的键,php,arrays,Php,Arrays,我有一个像这样的PHP数组 Array ( [04] => 1 [09] => 1 [10] => 1 [01] => 1 ) Array ( [01] => 1 [02] => 0 [03] => 0 [04] => 1 [05] => 0 [06] => 0 [07] => 0 [08] => 0 [09] =>
Array
(
[04] => 1
[09] => 1
[10] => 1
[01] => 1
)
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;
}
Array
(
[01] => 1
[02] => 0
[03] => 0
[04] => 1
[05] => 0
[06] => 0
[07] => 0
[08] => 0
[09] => 1
[10] => 1
)
我希望确保其中包含键1-10,如果它们不存在,那么我希望将它们与值0相加,因此我的最终数组如下
Array
(
[04] => 1
[09] => 1
[10] => 1
[01] => 1
)
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;
}
Array
(
[01] => 1
[02] => 0
[03] => 0
[04] => 1
[05] => 0
[06] => 0
[07] => 0
[08] => 0
[09] => 1
[10] => 1
)
我是这样做的
Array
(
[04] => 1
[09] => 1
[10] => 1
[01] => 1
)
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;
}
Array
(
[01] => 1
[02] => 0
[03] => 0
[04] => 1
[05] => 0
[06] => 0
[07] => 0
[08] => 0
[09] => 1
[10] => 1
)
以此类推,直到10点,然后我做一个排序,让它们按正确的顺序排列
ksort($myarray)
这是可行的,但我知道这是相当笨重,可能不是很有效
有人能告诉我一个更好的解决方案吗?您可以使用一个简单的
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 )
*/
$myarray=array(
1 => 1,
2 => 1,
3 => 1);
对于($i=1;$i<11;$i++){
如果(!isset($myarray[$i]))
$myarray[$i]=0;
}
打印(myarray);
/*输出:
数组([1]=>1[2]=>1[3]=>1[4]=>0
[5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 [10] => 0 )
*/
只需使用这样的for循环
For($i = 1;$i<=10;$i++){
$index = (string)sprintf("%02d",$i);
if (!array_key_exists($index,$myarray)) {
$myarray[$index] = 0;
}
}
对于($i=1;$i),您可以构建一个空白数组(使用),然后使用在
$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
)
试试这个简单的东西
$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;
}
您可以使用和来创建一个预填充数组,其中键的前导为零,值为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);
使用函数技术最终会使您的流程看起来很复杂。选择正确解决方案的一个重要因素应该是省略ksort()
调用。如果正确设计了编码解决方案,您将按照所需的顺序存储数据—迭代后不进行清理
代码:()