【发布时间】:2016-10-18 04:47:50
【问题描述】:
我有两个来自外部网站的 JSON 数组。我对这两个数组进行排序和合并,对它们进行解码,然后按 ID 从高到低排序。
目前,当单击“字母”选项时,?sort=alphabetical 会添加到 URL 的末尾,当页面完成重新加载时,JSON 数组会再次被解码和合并。
这不是我想要的结果:我不希望在单击该选项时再次解码和合并 JSON 数组 - 我只是希望按字母顺序对已解码和合并的 JSON 数组进行排序。
数组:
$homepage = array();
$homepage[]= '{
"info":{
"collection":[
{
"Name":"Charlie",
"ID":"7"
},
{
"Name":"Emma",
"ID":"9"
}
]
}
}';
$homepage[] = '{
"info":{
"collection":[
{
"Name":"Bob",
"ID":"5"
}
]
}
}';
排序:
$data = array();
foreach ($homepage as $homepage2) {
$tmp=json_decode($homepage2, false);
$data = array_merge($data,$tmp->info->collection);
}
if(!empty($_GET['sort']) && $_GET['sort'] == 'alphabetical') {
usort($data, function ($a, $b) {
return strcmp($a->Name, $b->Name);
});
}else{
usort($data, function ($a, $b) {
return $b->ID - $a->ID;
});
}
echo'
<select onchange="location.href = this.value;">
<option value="example.php?sort=alphabetical">Alphabetical</option>
</select>
';
foreach($data as $key) {
echo'
<a href="test.com">
<p>'.$key->ID.'</p>
<p>'.$key->Name.'</p>
</a>
';
}
【问题讨论】:
-
你能重新表述一下这个问题吗?我似乎无法破译你的意思。
-
@TheCodesee 如果你想在不刷新的情况下更改页面的内容,你几乎肯定需要编写一些 JavaScript 来执行此操作 - 除非你想向服务器创建另一个请求并替换内容页面。
-
请问您为什么不想再次解码/合并 JSON 字符串数组?这不是一个大的性能问题,避免这种情况的唯一方法是将解码/合并的数据存储在某个地方(如 PHP 会话或 DB),但这似乎只会带来更多问题。
-
@Sam 好问题。正如我在帖子中提到的,我从外部 url 获取 json 数据(我在这个问题中发布了一个 json 文件的示例,以使其更容易理解)。我担心如果我发出太多请求,服务器会阻止我。
-
您能否给出输出
ID和Name值的确切方式?我不认为你只是在没有 HTML 的情况下输出它们?基于 Javascript 的解决方案需要知道您将它们放入的确切 HTML 结构。
标签: javascript php arrays json sorting