多维动态阵列差键和值php



我有一个多维动态数组,因此看起来像:

    $array = array(
   'name1' => [],
   'name2' => array('x1' => 25, 'a2' => 10, 'y3' => 8),
   'name3' => array('x3' => 5, 'y3' => 6)
    );

我需要的是:

        $array = array(
   'name1' => array('x1' => 0, 'a2' => 0, 'y3' => 0, 'x3' => 0),
   'name2' => array('x1' => 25, 'a2' => 10, 'y3' => 8, 'x3' => 0),
   'name3' => array('x1' => 0, 'a2' => 0, 'y3' => 6, 'x3' => 5)
    );

最大的问题是这个数组是动态的,我该怎么做?

您可以使用array_mergecall_user_func_arrayarray_keysarray_fill_keys获取所有键。

使用map通过数组循环并填充缺失的键

$array = array(
   'name1' => [],
   'name2' => array('x1' => 25, 'a2' => 10, 'y3' => 8),
   'name3' => array('x3' => 5, 'y3' => 6)
);
//Get all keys and assign 0 as default
$keys = array_fill_keys(array_keys( call_user_func_array('array_merge', $array) ), 0);
//Map the array and check
$results = array_map(function($v) use($keys) {
    $arr = array();
    foreach( $keys as $key => $val ) {
        $arr[$key] = isset( $v[$key] ) ? $v[$key] : 0;
    }
    return $arr;
}, $array);

echo "<pre>";
print_r( $results );
echo "</pre>";

这将导致:

Array
(
    [name1] => Array
        (
            [x1] => 0
            [a2] => 0
            [y3] => 0
            [x3] => 0
        )
    [name2] => Array
        (
            [x1] => 25
            [a2] => 10
            [y3] => 8
            [x3] => 0
        )
    [name3] => Array
        (
            [x1] => 0
            [a2] => 0
            [y3] => 6
            [x3] => 5
        )
)

这是我的答案,尽管我认为有一种更好的方法:

<?php
$array = array(
    'name1' => [],
    'name2' => array('x1' => 25, 'a2' => 10, 'y3' => 8),
    'name3' => array('x3' => 5, 'y3' => 6)
);
$keys=['x1','a2','y3','x3'];
$l=sizeof($array);
for($i=1;$i<=$l;$i++){
    if($i!=$l){
        foreach($keys as $k){
            if(!isset($array["name$i"][$k])) $array["name$i"][$k]=0;
        }
    }
    else{
        foreach($keys as $k) if(!isset($array["name$i"][$k])) $array["name$i"][$k]=0;
    }
}
echo "<h2><pre>";
print_r($array);
?>

输出:

Array
(
    [name1] => Array
        (
            [x1] => 0
            [a2] => 0
            [y3] => 0
            [x3] => 0
        )
    [name2] => Array
        (
            [x1] => 25
            [a2] => 10
            [y3] => 8
            [x3] => 0
        )
    [name3] => Array
        (
            [x3] => 5
            [y3] => 6
            [x1] => 0
            [a2] => 0
        )
)

最新更新