如果声明似乎无法正常工作

时间:2010-01-15 19:45:16

标签: 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 ($data .$operator. $range) {
        $zipcodes[] = "$s[zipcode]";   
    }
}               

我的意思是,我可以在foreach中添加if / else,但不确定是否会增加任何“开销”。

7 个答案:

答案 0 :(得分:5)

尝试:

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

}

或使用eval()

答案 1 :(得分:4)

 if ($data .$operator. $range) 

总是如此,因为它是一个字符串,而不是null。

您可以使用这个简单的代码找出问题:

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

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

答案 2 :(得分:1)

'点'只能做常规的'字符串'连接 - 你不能指望它们(注入字符串)表现得像普通的'真实'操作符。

考虑一下:if $data = 'data1'$range = 50 if语句变为:

if ('data1<=50')可能只评估为真或假,就像if ('yournamehere')if('randommumbojumbo')

答案 3 :(得分:1)

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

因此,你可能需要eval(躲避和掩盖人,躲避和掩护)if的内容。

答案 4 :(得分:0)

您似乎错过了结束}

答案 5 :(得分:0)

我认为你需要这样做:

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]";   
      }
    }
}   

答案 6 :(得分:0)

您不能拥有代表评估运算符的变量。您必须将代码切换为:

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'];
    }
}