[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загвоздка с конструкцией SWITCH
poli-smen
Я совсем недавно начал изучать PHP. Я понимаю, что основан он в основном на синтаксисе языка Си, но дело в том, что я пишу программы на Delphi - отсюда и маленькая загвоздка.
Один кусок скрипта на PHP я записал ввиде конструкции if..elseif, но хотелось бы его переделать более красиво - на конструкцию switch, но только как это сделать, что то не пойму...
Вобщем в цикле я получаю очередной символ строки и проверяю к какой категории он относится. На Delphi это выглядело бы вот так:
Код

 case c of
   'A'..'Z':
     {Чтото делаю с большой латинской буквой};
   'a'..'z':
     {Чтото делаю с маленькой латинской буквой};
   'А'..'Я', 'Ё':
     {Чтото делаю с большой русской буквой};
   'а'..'я', 'ё':
     {Чтото делаю с маленькой русской буквой};
   '0'..'9':
     {Чтото делаю с цифрой};
   '+', '-', '*', '/', '%', ':', '(', ')':
     {Чтото делаю с перечисленными символами};
 else
     {Ошибка - запрещённый символ};
 end;




Спустя 1 час, 40 минут, 1 секунда (13.05.2009 - 12:37) Joker написал(а):
на php нельзя делать в switch интервал значений....

Спустя 30 минут, 38 секунд (13.05.2009 - 13:08) jetistyum написал(а):
О да, синтаксис php напоминает синтаксис Си .... наверное так же как синтаксис ассемблера....
хотя.. согласен... фигурные скобки и там и там есть



Спустя 1 минут, 38 секунд jetistyum написал(а):
а вообще какой результат ты преследуешь??? в чем заключается функционал твоего скрипта, что тебе приходится парсить каждую букву в слове???
может есть более элегантное решение ???
кстати посмотри in_array()

Спустя 39 минут, 1 секунда (13.05.2009 - 13:47) poli-smen написал(а):
Цитата
О да, синтаксис php напоминает синтаксис Си .... наверное так же как синтаксис ассемблера....

Не просто напоминает, а практически содран с Си. Ну и плюс добавлено удобств, чтобы хоть немного сгладить "угловатость" Си...

Цитата
а вообще какой результат ты преследуешь??? в чем заключается функционал твоего скрипта, что тебе приходится парсить каждую букву в слове???
может есть более элегантное решение ???

Как я уже говорил - этот скрипт я уже написал через if..elseif и он уже работает. А в первоначальной задаче мне нужно было оставить в строке только разрешённые символы. А потом интерес взял: неужели Си-шный switch действительно настолько недоделанный или может я чтото непонял...
Тот код который я привёл в первом посте для Delphi, на PHP будет выглядеть через if..elseif так:
PHP
$c=ord($str{$i});
  if (
$c>=ord('A') && $c<=ord('Z')) {
    echo 
'Большая латинская буква';
  } elseif (
$c>=ord('a') && $c<=ord('z')) {
    echo 
'Маленькая латинская буква';
  } elseif (
$c>=ord('А') && $c<=ord('Я') || $c===ord('Ё')) {
    echo 
'Большая русская буква';
  } elseif (
$c>=ord('а') && $c<=ord('я') || $c===ord('ё')) {
    echo 
'Маленькая русская буква';
  } elseif (
$c>=ord('0') && $c<=ord('9')) {
    echo 
'Цифра';
  } elseif ( 
strpos('+-*/%:()'$c)!==false ) {
    echo 
'Разрешённый символ';
  } else {
    echo 
'Ошибка - запрещённый символ';
  }

Получается не очень удобочитаемо... :(

Спустя 16 минут, 46 секунд (13.05.2009 - 14:03) jetistyum написал(а):
для сравнения с разрешенными символами думаю лучше обратиться к регулярным выражениям ...

Спустя 5 дней, 23 часа, 13 минут, 38 секунд (19.05.2009 - 13:17) poli-smen написал(а):
Цитата
для сравнения с разрешенными символами думаю лучше обратиться к регулярным выражениям ...

Мне тоже думается, что здесь лучше использовать регулярные выражения. Но я с ними не сильно разобрался... sad.gif
Скажите, а можно ли одним регулярным выражением сделать следующее:
1) Убрать из строки все символы пробела и знака минус, и заменить символы "0,1,2,8" на "O,I,Z,B" соответственно;
2) Сообщить об ошибке если оставшиеся символы не входят в диапазон "0-9,A-Z".

Спустя 3 часа, 51 секунда (19.05.2009 - 16:18) Joker написал(а):
Проще помоему сразу
Цитата (poli-smen @ 19.05.2009 - 10:17)
Сообщить об ошибке если оставшиеся символы не входят в диапазон "0-9,A-Z".


Спустя 11 минут, 16 секунд (19.05.2009 - 16:29) poli-smen написал(а):
Цитата
Проще помоему сразу

Не - я имею ввиду можно ли одним регулярным выражением выполнить те две указанные операции в любом порядке?

Спустя 2 часа, 15 минут, 27 секунд (19.05.2009 - 18:45) Grazor написал(а):
Цитата (poli-smen @ 19.05.2009 - 13:17)
1) Убрать из строки все символы пробела и знака минус, и заменить символы "0,1,2,8" на "O,I,Z,B" соответственно;

не, регулярки не совсем для этого. тут лучше str_replace
Цитата (poli-smen @ 19.05.2009 - 13:17)
2) Сообщить об ошибке если оставшиеся символы не входят в диапазон "0-9,A-Z".

ну это можно и регулярными выражениями..

Спустя 19 часов, 57 минут, 27 секунд (20.05.2009 - 14:42) Han написал(а):
Цитата
на php нельзя делать в switch интервал значений....


Да, это не продуманно конечно зделали.

Спустя 5 часов, 28 минут, 55 секунд (20.05.2009 - 20:11) Joker написал(а):
Цитата (Han @ 20.05.2009 - 17:42)
Да, это не продуманно конечно зделали.


Ну это еще нужно подумать продуманно или нет... а еслиб можно было интервалы наверняка свитч бы работал медленее раза в 3

Спустя 24 минуты, 10 секунд (20.05.2009 - 20:35) twin написал(а):
Цитата
на php нельзя делать в switch интервал значений...

А это что?
PHP
$c ord('S'); 
switch(
$c)
{
    case  
$c >= ord('A') && $c <= ord('Z'):
    echo 
'Большая латинская буква';
    break;
    
    case  
$c >= ord('А') && $c <= ord('Я') || $c === ord('Ё'):
    echo 
'Большая русская буква';
    break;

    default:
    echo 
'Ошибка - запрещённый символ';
}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.