我正在使用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
答案 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;
}