2016-09-15 5 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); 
} 

Но даже когда я сравнивала строки перед тем, как создать объект массива, он по-прежнему возвращает эти «неправильные» компании. У кого-то есть идея, что я делаю неправильно? Любая помощь будет принята с благодарностью!

Edit: В случае, если кто-то хочет знать, какие 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

Смежные вопросы