首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将PHP中的JSON作为字符串处理

将PHP中的JSON作为字符串处理
EN

Stack Overflow用户
提问于 2018-09-14 08:25:22
回答 1查看 305关注 0票数 -1

学生在这里。对于一个项目,我实现了jQuery UI's autocomplete widget。该小部件允许调用PHP脚本,该脚本返回包含建议的JSON数据。我使用的API提供了一个大型JSON文件,其中包含允许的条目(大约30兆),格式如下:

代码语言:javascript
复制
[
  {
    "id": 707860,
    "name": "Hurzuf",
    "country": "UA",
    "coord": {
      "lon": 34.283333,
      "lat": 44.549999
    }
  },
  {
    "id": 519188,
    "name": "Novinki",
    "country": "RU",
    "coord": {
      "lon": 37.666668,
      "lat": 55.683334
    }
  },

你明白了吧。为了查找部分匹配,下面是我编写的PHP脚本:

代码语言:javascript
复制
<?php

$cityPage = file_get_contents("citylist.json");

function strpos_all($haystack, $needle) {
    $offset = 0;
    $cityArray = array();
    while (($pos = strpos($haystack, $needle, $offset)) !== FALSE) {
        $offset   = $pos + 1;
        $length= (strpos($haystack, '"coord"', $offset)-$pos);
        $city = str_replace('",
    "country": "',", ",(substr($haystack, $pos, ($length-7))));
        if (in_array($city,$cityArray) == FALSE) {
          $cityArray[] = $city;
        }
    }
    return $cityArray;
}
echo json_encode(strpos_all($cityPage, $_GET['term']));
?>

我最初尝试在file_get_contents之后使用json_decode,但我认为这真的会对性能造成不必要的影响,因为1) JSON文件太大,2)我并不真正关心它是否是JSON对象(这是正确的术语吗?)在PHP中,我可以像处理字符串一样轻松地处理它。

所以有三个问题:

  1. 你同意只把它作为一个字符串吗?
  2. 正如你所看到的,当我设置我的$city变量时(去掉中间的所有东西-我真的只想要格式为"London,UK“的所有东西),行间距/空白间距变得奇怪。有没有更好的方法来处理这个问题?
  3. 与上面的#2相关。正如您在substr函数中看到的那样,我必须从计算出的长度中减去7以获得所需的输出(我基本上是通过调整fire并遍历它,直到获得所需的输出)。我如何知道这一点/在未来更好地计算它?

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-09-14 08:38:29

一种方法是确保已使用json_decode方法将获取的JSON建议解析为数组。循环遍历此数组,根据每个循环中每个对象的namecountry属性检查query string,然后对于匹配的对象,构造建议字符串并推送到$cityArray中。

但是,由于JSON建议数据的大小可能非常大,因此此逻辑可能会对脚本的性能产生负面影响。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52323401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档