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条)

报告相同问题?

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)