gleber1
@gleber1

Почему count в данном случае бессилен?

function valid($strNotChanges){
				$arrNotSorted=split(' ', $strNotChanges);
				foreach ($arrNotSorted as $value){
					switch ($value) {
   						case is_numeric($value):
        					$number = $value;
							echo 'вырезаное число:'.$number;
        				break;
   						case count($value) == 1 and is_numeric($value) == false:
        					$symbol = $value;
							echo 'вырезаный символ:'.$symbol;
        				break;
   						case is_numeric(substr($value,1)) and !is_numeric(substr($value,count($value))):
       						$readyVal = $value;
							echo 'смежное значение:'.$readyVal;
        				break;
					}

Там где каунт (во втором кейсе) почему то пропускает не только символ но и целое слово, на ум естественно приходит проверка strlen так вот она вообще тогда ничего выводить не будет , почему так? как же тогда быть , нету же проверки is_char? есть только из стринг?
  • Вопрос задан
  • 2354 просмотра
Решения вопроса 3
index0h
@index0h
PHP, Golang. https://github.com/index0h
$arrNotSorted = explode(' ', $strNotChanges);
$arrNotSorted = array_filter($arrNotSorted, 'strlen');
foreach ($arrNotSorted as $value) {
    if (is_numeric($value)) {
        return 'вырезанное число:' . $value;
    }

    if (strlen($value) === 1) {
        return 'вырезанный символ:' . $value;
    }

    if (preg_match('/^\d[^\d]+$/iu', $value)) {
        return 'смежное значение:' . $value;
    }

    return 'строка: ' . $value;
}


1. Учитесь писать человеко-понятный код. Часто наблюдаю картину, когда используется switch там, гед он не особо то нужен (я не спорю, иногда его необходимо использовать).
2. Функция split - устарела, вместо нее есть explode.
3. Судя по названию метода: valid, это как-то связано с валидацией. Не стоит использовать в нем echo и другие конструкции, не связанные с валидацией.
4. Соблюдайте тип проверяемых значений! В switch вообще удивительно, что у вас хоть что-то работает.
Например $value у вас '4abc', в во втором case вы делаете примерно следующее:
'4abc' == (count('4abc') == 1 and is_numeric('4abc') == false)
Это хрень постная в общем. Для строк не используйте count, есть strlen.
5. Сделайте что-то с форматированием, есть PSR2 например.
6. Да, чуть не забыл)) что на счет символов: \b, \r, \t, \n ?
Ответ написан
gleber1
@gleber1 Автор вопроса
count(str_split($value)) ==1
а для того чтобы работала русская кодировка
count(preg_split('//u',$value,-1,PREG_SPLIT_NO_EMPTY)) =1
Вот такое решение если кому то надо сделать проверку на is_char
Ответ написан
Есть небольшая проблема.
Вы вообще не понимаете, как работает выражение switch.

А работает он так - то, что в скобках после слова switch сравнивается с тем, что после слова case.
В вашем случае - там какие-то условия, которые всегда будут boolean.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы