PHP strpos 没有正确检查多个项目
PHP strpos not checking multiple items correctly
我正在通过 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方法无法正常进行第二次检查。
您需要使用 ===
而不是 ==
,因为如果您查找的字符位于字符串的第一个位置,strpos
将 return 0。
所以在 -50
中:
strpos('-50', '-') == 0 == FALSE // This is true
strpos('-50', '-') === FALSE // This is false
我正在通过 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方法无法正常进行第二次检查。
您需要使用 ===
而不是 ==
,因为如果您查找的字符位于字符串的第一个位置,strpos
将 return 0。
所以在 -50
中:
strpos('-50', '-') == 0 == FALSE // This is true
strpos('-50', '-') === FALSE // This is false