PHP可以';无法获取数组的正确格式
我不知怎的遇到了以下问题: 我想要实现的是基于密钥合并以下数组:PHP可以';无法获取数组的正确格式,php,arrays,loops,Php,Arrays,Loops,我不知怎的遇到了以下问题: 我想要实现的是基于密钥合并以下数组: {"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":"
{"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"}}
需要这样输出:
[{"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"}]
}]
在过去的两个小时里,我一直在尝试各种各样的事情,但每次尝试都返回了一种不同的格式,结果惨败。不知怎的,我搞不懂。为了完成这项工作,你有什么想法吗?
我很想听听你对此事的看法
谢谢 我更喜欢面向对象的方法 首先是列表项的对象:
{“子菜单id”:“父菜单”,“子菜单标签”:“父菜单”}
第二个对象用于项_标题:
{“项目标题”:“实体”,“列表项目”:}
最后一个对象或所有对象的数组:
{“菜单:}
以及相应的getter/setter等。下面的代码将为您提供必要的数组,您可以通过该数组进行迭代以获得所需的输出
$final_array = array();
foreach($array as $value) { //assuming that the original arrays are stored inside another array. You can replace the iterator over the array to an iterator over input from file
$key = /*Extract the key from the string ($value)*/
$existing_array_for_key = $final_array[$key];
if(!array_key_exists ($key , $final_array)) {
$existing_array_for_key = array();
}
$existing_array_for_key[count($existing_array_for_key)+1] = /*Extract value from the String ($value)*/
$final_array[$key] = $existing_array_for_key;
}
给你!在本例中,首先我将所有数组添加到一个数组中进行处理。
起初我以为它们在同一阵列中,但现在我意识到它们不是。 只需创建一个空的
$array=[]
,然后将它们全部添加到$array[]=$a1
,$array[]=$a2
,等等
$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);
如何使用HashMap风格的存储?对每个键存储一个存储值的数组。如果您需要代码,请回复。@AkshatSinghal一段代码来帮助我将不胜感激。我尝试了许多循环和临时键值存储组合,但没有一个达到所需的格式。请检查solution已发布;如果您需要迭代新数组的代码,请回复。感谢您的提示。我将对此进行更多思考,并在一段时间内尝试错误。
$input = 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"}}',
);
$input = array_map(function ($e) { return json_decode($e, true); }, $input);
$result = array();
$indexMap = array();
foreach ($input as $index => $values) {
foreach ($values as $k => $value) {
$index = isset($indexMap[$k]) ? $indexMap[$k] : $index;
if (!isset($result[$index]['item_header'])) {
$result[$index]['item_header'] = $k;
$indexMap[$k] = $index;
}
$result[$index]['list_items'][] = $value;
}
}
echo json_encode($result);