Если структура заявления в PHP

Я продолжаю получать ошибку со следующим битом кода. Это, наверное, какая-то мелочь, но я не вижу, что не так.

while ($ row = mysql_fetch_array ($ result))
  {
   $ varp = $ row ['ustk_retail'];
   if ($ varp <80000) {$ o1 = 1; }
   if (($ varp => 80000) && ($ varp <100000)) {$ o2 = "1"; }
   if (($ varp => 100000) && ($ varp <120000)) {$ o3 = "1"; }
   if (($ varp => 120000) && ($ varp <140000)) {$ o4 = "1"; }
   if (($ varp => 140000) && ($ varp <160000)) {$ o5 = "1"; }
   if (($ varp => 160000) && ($ varp <180000)) {$ o6 = "1"; }
   if (($ varp => 180000) && ($ varp <200000)) {$ o7 = "1"; }
   if (($ varp => 200000) && ($ varp <220000)) {$ o8 = "1"; }
   if (($ varp => 220000) && ($ varp <240000)) {$ o9 = "1"; }
   if (($ varp => 240000) && ($ varp <260000)) {$ o10 = "1"; }
   if (($ varp => 260000) && ($ varp <280000)) {$ o11 = "1"; }
   if (($ varp => 280000) && ($ varp <300000)) {$ o12 = "1"; }
   if ($ varp> = 300000) {$ o13 = "1"; }
  }

10 ответов

Решение

Больше или равно >= знак, а не =>

Обновить:
Вы правы. Это маленькая, но трудно найти ошибку.
Мне потребовалось разделить всю строку на части, чтобы понять, в чем проблема:

<?php
if 
(
$varp
=>
80000
)

Итак, в строке 5 говорится об ошибке разбора, и мне пришлось перепроверить этот оператор.
Конечно, сначала я отделил проблемную строку от остальной части кода, чтобы быть уверенным.

Бег php -l (lint) в вашем коде я получаю

Ошибка разбора: синтаксическая ошибка, неожиданный T_DOUBLE_ARROW

T_DOUBLE_ARROW токен - это то, что ожидает PHP при назначении значений массива ключам массива.

При сравнении для Больше или равно ожидаемому парсеру PHP T_IS_GREATER_OR_EQUALэто означает, что вы должны использовать >= вместо =>,

Увидеть

У вас ошибка выражения.

$varp=>220000 // is not a valid php expression

=> operator is used to assign values in arrays like:

$x = array( 'foo' => 'bar');

>= is the comparation assigment greater than or equal

Это более читаемый и компактный способ сделать то же самое:

$ranges = range(300000, 80000, -20000);

$index = 1;

$varp = 220001;

foreach ($ranges as $i => $range) {
    if ($varp >= $range) {
        $index = 13 - $i;
        break;
    }
}

${'o' . $index} = 1;

Во всяком случае - я думаю, что вы делаете что-то не так с использованием имени переменной результата.

Вы допустили ошибку в условиях if. Знак "больше, чем равно" равен>=, а не =>.

Ответ уже был дан, но я подумал, что этого достаточно, чтобы поделиться:

PHP принимает логические выражения в своем операторе switch.

switch(TRUE) {
    case $range <= 10:  echo "range below or equal to 10"; break;
    case $range <= 20:  echo "range above 10 below or equal to 20"; break;
    case $range <= 30:  echo "range above 20 below or equal to 30"; break;
    default: echo "high range";
}

На мой взгляд, это генерирует самый чистый и читаемый код.

Не уверен, что ваш код каким-то образом испортился, но похоже, что в некоторых условиях if вы пропускаете "==". Кроме того, как отметил Скиллдрик, все условия должны быть в скобках

Вы, вероятно, хотите изменить ($varp=300000) в ($varp==300000) и это может помочь заключить полное if-заявление внутри (), как это

if($varp80000 && $varp100000 && $varp120000 && $varp140000 && $varp160000 && $varp180000 && $varp200000 && $varp220000 && $varp240000 && $varp260000 && $varp280000 && $varp==300000) { $o13 = "1"; }

С другой стороны, откуда эти странные переменные $varp####?

"Больше или равно is >= NOT =>. Вы используете => для массивов для ключей / значений.

Добавьте еще одну скобку вокруг условий в if....

if ( ($varp80000) && ($varp100000) && ($varp120000) && ($varp140000) && ($varp160000) && ($varp180000) && ($varp200000) && ($varp220000) && ($varp240000) && ($varp260000) && ($varp280000) && ($varp=300000) ) { $o13 = "1"; }

Другие вопросы по тегам