dqellle310167 2014-01-26 17:10
浏览 23
已采纳

PHP无法获得正确的数组格式

I got stuck somehow on the following problem: What I want to achieve is to merge the following arrays based on key :

{"Entities":{"submenu_id":"Parents","submenu_label":"parents"}}
{"Entities":{"submenu_id":"Insurers","submenu_label":"insurers"}}
{"Users":{"submenu_id":"New roles","submenu_label":"newrole"}}
{"Users":{"submenu_id":"User - roles","submenu_label":"user_roles"}}
{"Users":{"submenu_id":"Roles - permissions","submenu_label":"roles_permissions"}}
{"Accounting":{"submenu_id":"Input accounting data","submenu_label":"new_accounting"}}

Which needs to output like this:

[{"item_header":"Entities"}, 
 {"list_items" :
    [{"submenu_id":"Parents","submenu_label":"parents"}, 
    {"submenu_id":"Insurers","submenu_label":"insurers"}]
}]
[{"item_header":"Users"}, 
 {"list_items" : 
    [{"submenu_id":"New roles","submenu_label":"newrole"}
    {"submenu_id":"User - roles","submenu_label":"user_roles"}
    {"submenu_id":"Roles - permissions","submenu_label":"roles_permissions"}]
}]
[{"item_header":"Accounting"}, 
 {"list_items" :
    [{"submenu_id":"Input accounting data","submenu_label":"new_accounting"}]
}]

I have been trying all kinds of things for the last two hours, but each attempt returned a different format as the one required and thus failed miserably. Somehow, I couldn't figure it out.
Do you have a construction in mind to get this job done?
I would be very interested to hear your approach on the matter.

Thanks.

  • 写回答

4条回答 默认 最新

  • drryyiuib43562604 2014-01-26 17:34
    关注

    Here you are!
    In this case, first I added all arrays into one array for processing.
    I thought they are in same array first, but now I realize they aren't. Just make an empty $array=[] then and then add them all in $array[]=$a1, $array[]=$a2, etc...

       $array = '[{"Entities":{"submenu_id":"Parents","submenu_label":"parents"}},
       {"Entities":{"submenu_id":"Insurers","submenu_label":"insurers"}},
       {"Users":{"submenu_id":"New roles","submenu_label":"newrole"}},
       {"Users":{"submenu_id":"User - roles","submenu_label":"user_roles"}},
       {"Users":{"submenu_id":"Roles - permissions","submenu_label":"roles_permissions"}},
       {"Accounting":{"submenu_id":"Input accounting data","submenu_label":"new_accounting"}}]';
    
       $array = json_decode($array, true);
    
    
        $intermediate = []; // 1st step
    
        foreach($array as $a)
        {
           $keys = array_keys($a);
           $key = $keys[0]; // say, "Entities" or "Users"
           $intermediate[$key] []= $a[$key];
        }
    
        $result = []; // 2nd step
    
        foreach($intermediate as $key=>$a)
        {
           $entry = ["item_header" => $key, "list_items" => [] ];
           foreach($a as $item) $entry["list_items"] []= $item;
           $result []= $entry;
        }
    
        print_r($result);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)