Вопрос не столько по друпалу, сколько по 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-ый раз, и на этом месте застрял уже чёрт знает на сколько.
Комментарии
это где вы такое сравнение в php видели? о_О в скобках всегда будет true
Спасибо за наводку. А как должно быть?
if ($b == 'а' || $b == 'и' ...
почитайте основы php хотя бы
У человека свое восприятие PHP
http://www.php.su/learnphp/cs/?co#if
Благодарю.
Меня просто смутило, насколько громоздко получалось при таком написании. Выходит, "неправильный" вариант таки единственно правильный.
До этого с php знаком только на уровне темизации, а там в сложных условиях потребности не было.
Сначала пишем цикл советов чайникам, потом разбираемся с if-else. Да, что то в этом есть
создайте массив вида
$array = array('а' => 1, 'б' => 2, ...)
, дальше просто<?php
if (isset($array[$b])) {
$result .= $array[$b];
$word['equal'] += $array[$b];
}
?>
А я-то думал: неужто я ошибся, и volocuga@drupal.org таки не тролль... Чайникам, вообще-то, php нужен лишь для темизации, да и то - постольку-поскольку.
2 xxandeadxx
Я старался сделать с минимальным числом переменных.
В итоге - только $a, $b - для всех промежуточных значений и массив $word с элементами ['equal'] и ['summ'].
В любом случае, ещё раз спасибо. Теперь всё прекрасно работывает. Сейчас доделываю через Rules.