PHP从多个json文件中的键值排序结果

Posted

技术标签:

【中文标题】PHP从多个json文件中的键值排序结果【英文标题】:PHP Sort results from key values inside multiple json files 【发布时间】:2022-01-11 15:41:12 【问题描述】:

是否可以在单独的 json 文件中按键值对结果进行排序? 我需要按“id”值对结果进行排序。 抱歉,如果这是重复的,但我已经搜索了整个互联网并找不到解决方案。

非常感谢您的帮助。

<div class="container grid grid-cols-2 gap-6 tablet:grid-cols-3 desktop:grid-cols-6">
    <?php
    $i = 0;
    $dir = (new DirectoryIterator(__DATA_PAGES_PATH__ . 'products/content/' . $lang));
    foreach ($dir as $productsdata) 
        if ($productsdata->isDot()) continue;
        $productdata = json_decode(file_get_contents(__DATA_PAGES_PATH__ . 'products/content/' . $lang . "/" . $productsdata));
        if ($productdata->popular > 0) 
    ?>
            <?php echo $productdata->id ?>
    <?php
        ;
        if (++$i == 6) break;
    
    ?>
</div>

目录内多个json文件内容:


    "id": 0,
    "name": "prd-name-0",
    "category": "prd-category-0"


    "id": 1,
    "name": "prd-name-1",
    "category": "prd-category-1"

【问题讨论】:

如果您直接从每个文件中输出内容,则不会。您需要先将所有这些数据放入一个数组中,然后对该数组进行排序,然后遍历排序后的数组以创建输出。 非常感谢。我宁愿创建一个单独的模式 json 来代替。 【参考方案1】:

所以这是我为任何可能需要它的人提供的解决方案。感谢@CBroe

function sortkey($folder, $key)

    $GLOBALS['files'] = glob(__data__ . $folder . '/' . $GLOBALS['lang'] . '/*.json');
    $GLOBALS['sort'] = [];
    foreach ($GLOBALS['files'] as $GLOBALS['file']) 
        $GLOBALS['thisData'] = file_get_contents($GLOBALS['file']);
        $GLOBALS['thisDataArr'] = json_decode($GLOBALS['thisData']);
        if (isset($GLOBALS['thisDataArr']->$key)) 
            $GLOBALS['sort'][$GLOBALS['thisDataArr']->$key] = basename(str_replace('.json', '', $GLOBALS['file']));
        
    
    ksort($GLOBALS['sort']);
    // var_dump($GLOBALS['sort']);

【讨论】:

以上是关于PHP从多个json文件中的键值排序结果的主要内容,如果未能解决你的问题,请参考以下文章

我想更改从 iOS 中的服务器获取 bt json 的键值

如何将多个键值条目的 JSON 对象反序列化为 Rust 中的自定义结构

当用户从 Vue.js 中的 JSON 对象中选择第一个键时,如何显示剩余的键值?

在所有文件中找到JSON键,并删除相应的键值对。

如何从 JSON 对象中获取特定的键值

从 json 结果动态应用多个类名