drwghu6386 2018-04-23 09:41
浏览 31
已采纳

多维动态数组差异键和值php

i have an multidimensional dynamic array and so it looks like:

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

And what i need is:

        $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)
    );

The big problem is that this array is dynamic , how can i do it?

  • 写回答

2条回答 默认 最新

  • dousong1992 2018-04-23 09:54
    关注

    You can use array_merge, call_user_func_array, array_keys and array_fill_keys to get all keys.

    Use map to loop thru your array and fill the missing keys

    $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>";
    

    This will result to:

    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
            )
    
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?