PHP - 在for循环中切换值

时间:2017-10-12 21:37:06

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

我正在使用PHP编写页面。

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

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

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

$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

1 个答案:

答案 0 :(得分: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;
}