PHP strpos не проверяет несколько элементов правильно


Я втягиваю живые цены через api и проверяю значение CHANGEPCT24HOUR.

Если значение отрицательное, то я хочу стрелку вниз, если положительное-зеленую стрелку вверх.

Приведенный ниже код работает неправильно. Текущие значения: BTC: 8.32 & ETH: -2.86

Код:

      $json_string =    file_get_contents("https://myapi.com/?fsyms=BTC,ETH,DASH,LTC,NEO,XRP&tsyms=USD");
      $parsed_json = json_decode($json_string, true);
      $btcp = $parsed_json['DISPLAY']['BTC']['USD']['CHANGEPCT24HOUR'];
      $ethp = $parsed_json['DISPLAY']['ETH']['USD']['CHANGEPCT24HOUR'];
      if(strpos($btcp,'-') == FALSE){ 
         $btc = "<i class="fa fa-fw fa-arrow-up" style="color:green"></i>".$parsed_json['DISPLAY']['BTC']['USD']['CHANGEPCT24HOUR'];
         } else {
         $btc = "<i class="fa fa-fw fa-arrow-down" style="color:red"></i>".$parsed_json['DISPLAY']['BTC']['USD']['CHANGEPCT24HOUR'];
         }
      if(strpos($ethp,'-') == FALSE){ 
         $eth = "<i class="fa fa-fw fa-arrow-up" style="color:green"></i>".$parsed_json['DISPLAY']['ETH']['USD']['CHANGEPCT24HOUR'];
         } else {
         $eth = "<i class="fa fa-fw fa-arrow-down" style="color:red"></i>".$parsed_json['DISPLAY']['ETH']['USD']['CHANGEPCT24HOUR'];

         }
      $livechange = "BTC : ".$btc.'<br />';
      $livechange .= "ETH : ".$eth;
      echo $livechange;

Он показывает стрелку вверх для обоих. Однако, если я изменю проверку $eth strpos на эту if(strpos($ethp,'-') == FALSE) а затем переключить порядок или $eth вокруг него работает нормально.

Я не знаю. узнайте, почему оригинальный метод strpos не будет работать должным образом для второй проверки.

1 2

1 ответ:

Вам нужно использовать === вместо ==, так как strpos вернет 0, если искомый символ находится в первой позиции строки.

Итак, в -50 :

strpos('-50', '-') == 0 == FALSE // This is true

strpos('-50', '-') === FALSE // This is false