2010-03-31 3 views
2

Я продолжаю получать ошибку со следующим битом кода. Вероятно, это небольшая вещь, но я не вижу, что не так.Структура оператора в 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"; } 
    } 
+2

указать, какие ошибки вы получите. – zerkms

+1

Care разместить здесь ** **, что ошибка вас У меня есть? –

+0

Я получаю ошибку синтаксического анализа - Ошибка анализа: ошибка синтаксического анализа в C: \ wamp \ www \ wp \ wp-content \ themes \ canvas \ includes \ usedprice.php в строке 35 Строка 35 - if (($ varp => 80000) && ($ varp <100000)) {$ o2 = "1";} – 2010-03-31 09:31:35

ответ

11

больше или равно это >= знак, не =>

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

<?php 
if 
(
$varp 
=> 
80000 
) 

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

+11

На самом деле, если вы знаете, о чем упоминается T_DOUBLE_ARROW, упомянутое в сообщении об ошибке, ошибка очевидна и легко найти. См. Связанный список токенов парсера в моем ответе. – Gordon

27

Запуск php -l(ворс) на вашем код я получаю

Parse error: syntax error, unexpected T_DOUBLE_ARROW

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

При сравнении для больше или равно РНР Parser ожидает T_IS_GREATER_OR_EQUAL означает, что вы должны использовать >= вместо =>.

См

+2

+1, и даже если вы не знакомы со всеми токенами, 'T_DOUBLE_ARROW' является довольно описательным именем. Грустно, что есть люди, которым нужно разделить свой код на несколько строк, чтобы понять это. (Было бы вполне понятно, если бы они получили «неожиданный T_PAAMAYIM_NEKUDOTAYIM», хотя ...) – NikiC

-1

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

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

1

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

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

На другой ноте, где эти странные $ VarP #### переменные берутся?

1

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

2

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

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

$index = 1; 

$varp = 220001; 

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

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

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

3

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

$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 
2

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

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

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

По моему мнению, это самый чистый наиболее читаемый код.

+1

Вы, вероятно, имеете в виду 'switch (true) {/ * остальная часть вашего кода идет здесь * /}', хотя, правильно? – pinkgothic

+1

fixed $ range to TRUE – Gordon

+0

ah right tnx, был бы неплохой ошибкой для более позднего, если диапазон когда-либо попадает в «0» :) – Les

2

Вы ввели ошибку в условиях if. Значения, превышающие знак равенства, равны> = и не =>.

0

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

Смежные вопросы