Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-确保数组包含特定的键_Php_Arrays - Fatal编程技术网

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] =>

我有一个像这样的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] => 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()
调用。如果正确设计了编码解决方案,您将按照所需的顺序存储数据—迭代后不进行清理

代码:()