php - 优化Json解析

标签 php mysql json parsing foreach

我一直在浏览 SO 的问题和答案集合,但我找不到正确的解决方案来解决我的问题,尽管这个问题不会直接暗示编程答案,但它将寻求适当的方法,然后可以转换成源代码..以防万一mods将这个问题标记为没有建设性..无论如何,这只是我...

我有一个应用程序,通过利用json来接口(interface)来自其他数据库的数据,在我这边,我使用PHP+MySQL,解析接口(interface)文件的内容,我会得到一个数组的数组的数组,请参见下文;

{
"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...或者这个解决方案已经处于最佳状态?

最佳答案

当你进行 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
        }
    }
}

如果我的答案是正确的,请标记为正确答案。谢谢

关于php - 优化Json解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212014/

相关文章:

python - SQLAlchemy 中有mysql unix_timestamp 函数吗?

php - HTML/PHP 从下拉菜单中选择一个值并检索关联的行并输出该行的所有数据

c# - Days 和 TotalDays 之间有什么区别?

javascript - 处理大型 JSON 文件的最佳实践

javascript - 尾随逗号会破坏 JSON 吗?

php - MySQL : Problem in exporting the database

php - ERR_UNKNOWN_URL_SCHEME 加载一个 css

php - 什么时候应该使用 MySQLi 而不是 MySQL?

javascript - 从 JSON API React Native 打印值

php - 如何在显示子类别时获取类别详细信息?