我一直在浏览SO的问答集合,但我无法找到正确的解决方案,虽然这个问题不会直接暗示编程答案,但它会寻求适当的方法然后可以转换成源代码..以防万一mods标记这个问题不具有建设性..无论如何,那只是我......
我有一个应用程序通过利用json来连接来自其他数据库的数据,在我的最后我使用PHP + MySQL,解析接口文件的内容,我会得到一个数组数组,请看下面的内容;
{
"p_head": [
{
"GROUP_ID": "700",
"GROUP_DESC": "BBREAKFAST",
"children": {
"p_item": [
{
"GROUP_ID": "200",
"PROD_ID": "113"
}
]
}
},
{
"GROUP_ID": "601",
"GROUP_DESC": "AXPRESSO",
"children": {
"p_item": [
{
"GROUP_ID": "200",
"PROD_ID": "113"
}
]
}
}
]
}
现在在解析所述JSON数据时,我正在使用5个foreach循环,
1 to get the file contents,
1 to get the categories, store categories in array, store children in array
1 to expand the children array
1 to get to another level
1 to get to the array child
之后,我再次使用foreach循环通过类别并开始将它们插入到数据库中,然后再使用另一个foreach循环来遍历项目并将每一行存储到数据库中,
这是一个小问题,这个解决方案只是为了可读性吗?好像我编码好像我是编译器,每行执行一行......在效率方面?任何缺点,浪费处理能力?我应该减少foreach的使用,如果是的话,如何实现,下面是foreach循环的样本......
foreach($json_array as $key=>$value)
{
//echo "The Value: " .$value;
$arr = $value;
//print_r($arr);
//Category Expanding
foreach($arr as $key=>$value)
{
//echo "Key: ".$key."=>Value: ".$value."<br/>";
//Category
$category[] = array(
'cat_prodcat_posid'=>$value['GROUP_ID'],
'cat_description'=>$value['GROUP_DESC'],
'cat_hierarchy'=>$value['POSITION_ID']
);
//Category Items
$items[] = array(
'item_grp'=>$value['GROUP_ID'],
'item_arr'=>$value['children']
);
$categoryCount++;
}
//Items Expanding
foreach($items as $key=>$value)
{
$v = $value['item_arr'];
//print_r($v);
foreach($v as $key=>$value)
{
$v2 = $value;
//print_r($v2);
foreach($v2 as $key=>$value)
{
//$v3 = $value;
$item_expanded[] = array(
'item_posid'=>$value['PROD_ID'],
'item_poscode'=>$value['PROD_CODE'],
'item_description'=>$value['PROD_DESC'],
'item_prodcat_posid'=>$value['GROUP_ID'],
'item_price'=>$value['PROD_PRICE']
);
$itemCount++;
}
}
}
}
无论如何我可以在物品上特别切割一条快捷方式......我已经使用了3个foreach ......或者这个解决方案已经处于最佳状态?
答案 0 :(得分:1)
在制作foreach循环时,可以直接转到要循环的数组来剪切它。
foreach ($json_array['p_head'] as $key => $val) {
if ($key != 'children') {
//do whatever with non-children
} else {
foreach ($key['p_item'] as $key2 => $val2) {
//here is where your p_item info is
}
}
}
如果我的答案是正确的答案,请标记为正确答案。感谢