[РЕШЕНО] неправильно работает if-else в PHP

Главные вкладки

Аватар пользователя Lex-DRL Lex-DRL 24 июля 2010 в 23:04

Вопрос не столько по друпалу, сколько по php. Однако решил задать тут.

Возникла задача - посчитать по специальной таблице числовой эквивалент заголовка ноды. И на основе полученного значения автоматом связывать её через Nodereference.
Вот таблица:

а б в г д е/ё ж з и/й к л м н о п р с т у ф х ц ч ш щ ъ/ь ы э ю я
1 2 6 3 4 5 2 7 1 2 2 4 5 7 8 2 3 4 6 8 5 3 7 2 9 1 1 6 7 2

Всё работает нормально, кроме того куска, в котором собственно и определяется значение текущей буквы:
// В $b - текущая буква;
// в $result скидываются отчёты о выполнении, чтоб потом print $result;
// В $word['equal'] - ситается числовой эквивалент слова.
if ($b==("а"||"и"||"й"||"ъ"||"ы"||"ь")) {
$word['equal'] += 1;
$result .= '1';
} elseif ($b==("б"||"ж"||"к"||"л"||"р"||"ш"||"я")) {
$word['equal'] += 2;
$result .= '2';
} elseif ($b==("г"||"с"||"ц")) {
$word['equal'] += 3;
$result .= '3';
} elseif ($b==("д"||"м"||"т")) {
$word['equal'] += 4;
$result .= '4';
} elseif ($b==("е"||"ё"||"н"||"х")) {
$word['equal'] += 5;
$result .= '5';
} elseif ($b==("в"||"у"||"э")) {
$word['equal'] += 6;
$result .= '6';
} elseif ($b==("з"||"о"||"ч"||"ю")) {
$word['equal'] += 7;
$result .= '7';
} elseif ($b==("п"||"ф")) {
$word['equal'] += 8;
$result .= '8';
} elseif ($b=="щ") {
$word['equal'] += 9;
$result .= '9';
}
?>
Почему-то всё время выбирается 1 вариант. Пробовал через switch/case - то же самое.
Со строками работаю 1-ый раз, и на этом месте застрял уже чёрт знает на сколько.

Комментарии

Аватар пользователя Lex-DRL Lex-DRL 24 июля 2010 в 23:19

Благодарю.
Меня просто смутило, насколько громоздко получалось при таком написании. Выходит, "неправильный" вариант таки единственно правильный.
До этого с php знаком только на уровне темизации, а там в сложных условиях потребности не было.

Аватар пользователя xxandeadxx xxandeadxx 24 июля 2010 в 23:24

"Lex-DRL" wrote:
насколько громоздко получалось при таком написании

создайте массив вида $array = array('а' => 1, 'б' => 2, ...), дальше просто

<?php
if (isset($array[$b])) {
  
$result .= $array[$b];
  
$word['equal'] += $array[$b];
}
?>
Аватар пользователя Lex-DRL Lex-DRL 24 июля 2010 в 23:38

А я-то думал: неужто я ошибся, и volocuga@drupal.org таки не тролль... Чайникам, вообще-то, php нужен лишь для темизации, да и то - постольку-поскольку.

2 xxandeadxx
Я старался сделать с минимальным числом переменных.
В итоге - только $a, $b - для всех промежуточных значений и массив $word с элементами ['equal'] и ['summ'].

В любом случае, ещё раз спасибо. Теперь всё прекрасно работывает. Сейчас доделываю через Rules.