2016-09-15 75 views
0

我正在使用一个API来检索法国公司的信息并输出该信息的自定义JSON。您输入公司名称,并返回与搜索词相匹配的所有公司信息。尽管这个系统并不是100%完美的,但它也带来了很多与搜索价值几乎匹配的公司。检查一个字符串中是否有某些字符在PHP中

例如,我搜索'abc',并且在回报中我还获得了名称为'abl'的公司。

所以我想在将它们放入结果数组之前将它们过滤掉。

public function transform($obj){ 

//The $obj is the information retrieved from the API in JSON. 
    $data = json_decode($obj, true); 
    $retval = array(); 

//The '$name = $data["params"]["name"];' is the name the API used as search parameter. 
    $name = $data["params"]["name"]; 

    foreach ($data["companies"] as $item){ 

//The '$item["names"]["best"]' is the name of the company. 
     if(strpos($item["names"]["best"], $name) !== false){ 
      $retval[] = [ 
      "Company name" => $item["names"]["best"], 
      "More info" => array(
       "Denomination" => $item["names"]["denomination"], 
       "Commercial name" => $item["names"]["commercial_name"] 
      ), 
      "Siren number" => $item["siren"], 
      "Street" => $item["address"], 
      "Zip code" => $item["postal_code"], 
      "City" => $item["city"], 
      "Vat_number" => $item["vat_number"], 
      "Established on" => $item["established_on"] 
      ]; 
     }    
    } 
    return json_encode($retval, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); 
} 

但即使在创建数组对象之前比较字符串,它仍会返回这些'错误'的公司。任何人对我做错了什么都有想法?任何帮助将不胜感激!

编辑:如果有人想知道我使用的API,这里的链接:https://firmapi.com/

+0

这可以帮助你http://stackoverflow.com/questions/16283837/find-exact-string-inside-a-string – Farhan

回答

1

使用的preg_match()可以不用strpos找到精确匹配。希望这将帮助你

public function transform($obj){ 

//The $obj is the information retrieved from the API in JSON. 
    $data = json_decode($obj, true); 
    $retval = array(); 

//The '$name = $data["params"]["name"];' is the name the API used as search parameter. 
    $name = $data["params"]["name"]; 

    foreach ($data["companies"] as $item){ 

//The '$item["names"]["best"]' is the name of the company. 
     $string = 'Maramures'; 
     if (preg_match("~\b$string\b~",$name)) 
      $retval[] = [ 
      "Company name" => $item["names"]["best"], 
      "More info" => array(
       "Denomination" => $item["names"]["denomination"], 
       "Commercial name" => $item["names"]["commercial_name"] 
      ), 
      "Siren number" => $item["siren"], 
      "Street" => $item["address"], 
      "Zip code" => $item["postal_code"], 
      "City" => $item["city"], 
      "Vat_number" => $item["vat_number"], 
      "Established on" => $item["established_on"] 
      ]; 
     }    
    } 
    return json_encode($retval, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); 
} 
+0

谢谢!这工作完美! – RandomStranger

相关问题