【问题标题】:PHP - Switch values inside of a for loopPHP - 在 for 循环内切换值
【发布时间】:2018-03-24 23:05:10
【问题描述】:

我正在使用 PHP 编写一个页面。

我可以通过 JSON(外部,我无法修改)获取类别列表。每个类别都有一个 ID 和一个名称。我正在使用 foreach 检索列表:

$jsonCategoriesDecode = json_decode($jsonCategories, true);
foreach ($categories as $category){
    $category['id'] = $category['name'];
    }

在我的代码的另一个区域,我有一个 for loop 来通过 JSON(也是外部的)获取另一种类型的信息。 但在这里我只能访问 Category ID(不能访问 Category Name)。

$jsonLatest = json_decode($latest, true);
for ($i = 1; $i < 6; $i++) {
    $topic_category[$i] = $jsonLatest['topic_list']['topics'][$i]['category_id'];
    echo $topic_category[$i];
}

我想要在 for 循环中显示 类别名称(而不是 类别 ID)。

我尝试了以下方法:

$jsonLatest = json_decode($latest, true);
for ($i = 1; $i < 6; $i++) {
    $topic_category[$i] = $jsonLatest['topic_list']['topics'][$i]['category_id'];

    // Translate the category ID to Name
    foreach ($jsonCategoriesDecode['category_list']['categories'] as $category){
        $category['id'] = $category['name'];
        $topic_category[$i] = $category['id'];
        echo $category['name'];

    }
}

但输出是所有类别的名称列表。 我只想要$topic_category[$i]的名字

我使用switch 声明,但我没有任何运气。我无法对所有类别 ID 及其对应的 类别名称 进行硬编码,因为我将来会创建更多,因此需要自动化。这就是我尝试使用foreach loop 的原因。

如何将类别 ID 转换为 类别名称

编辑: 主要问题是我无法在 $jsonLatest 上获取类别名称,只有 ID。

我无法更改 JSON 内容,因为它们是外部的。这就是为什么我认为也许使用其他 JSON(我可以同时获取 ID 和名称)将有助于将该 ID 转换为 $jsonLatest 上的名称。

foreach 循环只是为了这个,它不会对我的代码做任何其他事情。我什至可以删除它

编辑 2:添加源链接

Json 文件: https://forum.illustration.tools/latest.json https://forum.illustration.tools/categories.json

PHP 文件: pastebin.com/bmX8TAaj

【问题讨论】:

    标签: php json for-loop foreach switch-statement


    【解决方案1】:

    正确的方法是见仁见智。

    如果可以避免的话,我肯定不会在 for 循环(或任何两个嵌套循环)内执行 foreach 循环。适合您的情况。

    这不是因为它是错误的,而是因为它增加了代码的时间复杂度。随着数组变大,您的代码执行速度会指数地变慢。

    现在,这仍然是一种意见,您必须自己决定。也许您知道这些 json 对象不会随着时间的推移而变大,也许内存是您脚本的一个关键问题。在这种情况下,请坚持使用其他解决方案。

    不过,我就是这样解决的。

    $jsonCategories = json_decode('https://forum.illustration.tools/categories.json', true);
    $jsonLatest = json_decode('https://forum.illustration.tools/latest.json', true);
    
    $categoryNames = array();
    foreach ($jsonCategories['category_list']['categories'] as $category) {
        $categoryNames[$category['id']] = $category['name'];
    }
    
    for ($i = 1; $i < 6; $i++) {
        $topic_category[$i] = $jsonLatest['topic_list']['topics'][$i]['category_id'];
        echo $categoryNames[$topic_category[$i]], PHP_EOL;
    }
    

    【讨论】:

    • 感谢您的帮助。主要问题是我无法在 $jsonLatest 上获得类别名称,只有 ID。而且我无法更改 JSON 内容,因为它是外部的。这就是为什么我认为也许使用其他 JSON(我可以在其中获取 ID 和名称)将有助于将该 ID 转换为 $jsonLatest 上的名称。 foreach 循环只是为了这个,它不会对我的代码做任何其他事情。我什至可以删除它。我尝试了您的代码,但输出为空。您是否有另一种选择,我该如何将类别 ID 翻译 到名称?
    • 你能举例说明 $latest 和 $jsonCategories 的样子吗?当我在这两个结构上测试完全相同的代码时,它可以工作: [{'id': 10, 'name': 'foo'},{'id': 20, 'name': 'bar'},{'id ': 30, 'name': 'taz'},{'id': 40, 'name': 'dep'},{'id': 50, 'name': 'biz'},{'id': 60, 'name': 'hup'}] 和 {'topic_list': {'topics': [{'category_id': 60},{'category_id': 50},{'category_id': 40},'category_id' : 30},{'category_id': 20},{'category_id': 10}]}}
    • 这两个都是 JSON:forum.illustration.tools/latest.jsonforum.illustration.tools/categories.json 这是我的完整文件:pastebin.com/bmX8TAaj 感谢您的帮助!我真的很感激。
    • 好的,我更新了解决方案以匹配您的数据结构。它不起作用的原因是因为我认为 jsonCategories 是类别对象的顶级数组。
    • 嗯,它不起作用。显然,有一个错误,也许有一个错字? codepad.org/lTfKJvwI 再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多