Php If语句不';它似乎不能正常工作

Php If语句不';它似乎不能正常工作,php,Php,我可能做错了,但看看吧。如果我硬编码逻辑,它会工作,但如果我尝试使用它作为变量,它就不会工作 if($range <= 50) { $operator = "<="; } else { $operator = ">="; } foreach($cursor as $s) { $data = round($this->distance($zip_lat, $zip_lon, $s["lat"],$s["lon"]), 2); if ($d

我可能做错了,但看看吧。如果我硬编码逻辑,它会工作,但如果我尝试使用它作为变量,它就不会工作

if($range <= 50) {
    $operator = "<=";
} else {
    $operator = ">=";
}

foreach($cursor as $s) {
    $data = round($this->distance($zip_lat, $zip_lon, $s["lat"],$s["lon"]), 2);

    if ($data .$operator. $range) {
        $zipcodes[] = "$s[zipcode]";   
    }
}               
if($range distance($zip_lat,$zip_lon,$s[“lat”],$s[“lon”]),2);
如果($data.$operator.$range){
$zipcodes[]=“$s[zipcode]”;
}
}               
我的意思是,我可以在foreach中添加if/else,但不确定它是否会添加任何“开销”。

试试:

if ($range <= 50 ? $data <= $range : $data >= $range) {

}

如果($range您似乎缺少结束日期}

我认为您需要这样做:

foreach ( $cursor as $s ) {
    $data = round($this->distance($zip_lat, $zip_lon, $s["lat"],$s["lon"]), 2);
    if ( $range <= 50 ) {
      if ( $data <= $range ) {
          $zipcodes[] = "$s[zipcode]";   
      }
    } else {
      if ( $data >= $range ) {
          $zipcodes[] = "$s[zipcode]";   
      }
    }
}   
foreach($s光标){
$data=round($this->distance($zip_-lat,$zip_-lon,$s[“lat”],$s[“lon”]),2);
如果($范围
始终为true,因为它是一个字符串,而不是null

您可以使用以下简单代码找出问题:

$data="0";
$operator=">=";
$range="1";

if ($data .$operator. $range) {
       echo   $data .$operator. $range . " is true !";   
}                   

您不能有代表求值运算符的变量。您必须将代码切换为以下内容:

foreach ($cursor as $s) {
    $data = round($this->distance($zip_lat, $zip_lon, $s["lat"],$s["lon"]), 2);
    if ($range <= 50 && $data <= $range) {
        $zipcodes[] = $s['zipcode'];
    } else if ($data >= $range) {
        $zipcodes[] = $s['zipcode'];
    }
}
foreach($s光标){
$data=round($this->distance($zip_-lat,$zip_-lon,$s[“lat”],$s[“lon”]),2);

如果($range点)只进行常规的“字符串”串联,那么不能期望它们(作为字符串注入)表现得像常规的“实”运算符

想想看:如果
$data='data1'
$range=50
您的if语句变成:


if('data1我非常怀疑if只是在计算字符串$date.$operator.$range(它将始终返回true),因为您所做的只是将运算符和操作数连接在一起


因此,您可能需要(躲避并掩护人员,躲避并掩护)if的内容。

是否应该是operator=“>”对于else部分?其他人已经解决了您的问题,但没有准确地解释问题。您的代码不工作的原因是$data。$operator。$range的计算结果是字符串,而不是您正在使用的布尔表达式,并且非空、非零字符串的计算结果总是为true。lol@title:我认为大多数
语言都会这样当然,我已经确保了“if”语句正常运行;-)完美,这似乎是可行的。那么假设我在foreach循环中添加了额外的“if/else”,这会增加“开销”吗@幸运的是,在PHP中,不必担心额外IF的开销,整个事情无论如何都是膨胀的,不会对您的运行时间产生0.00001%的影响!为什么您如此担心“开销”?这是一个已知的瓶颈吗(说真的,我认为您过早地进行了优化)?是的,你也可以使用if/else,在速度方面没有差别不是真的。如果你从文件中读取或在代码中的任何地方进行db查找,它将比添加if花费1000倍的时间。重点是,不要担心这样一个微小的优化,除非你在100000次迭代中运行这个块。哈,是的,我刚刚发现了。谢谢。虽然我的代码中有它。对,但是因为在我的例子中,$data和$range都是数字,我想我可以把“运算符”放在混合中。我不同意“始终”部分,考虑一下:
$data='0';$operator=';$range='';if($data.$operator.$range){echo'这个语句总是正确的';};
是的,这正是它所做的,正如连接运算符所定义的那样。不需要怀疑任何事情;)+1表示duck和cover
foreach ($cursor as $s) {
    $data = round($this->distance($zip_lat, $zip_lon, $s["lat"],$s["lon"]), 2);
    if ($range <= 50 && $data <= $range) {
        $zipcodes[] = $s['zipcode'];
    } else if ($data >= $range) {
        $zipcodes[] = $s['zipcode'];
    }
}