Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Разделение слова на части

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Deonis
Отправлено: 18 Мая, 2011 - 18:27:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




Функций, с помощью которых можно разбить строку на части, предостаточно. А вот как разбить отдельно взятое слово на части по заданному кол-ву символов - функцию не нашел.
Конечно способ есть, но как мне кажется, он какой-то индуский.
Например:
PHP:
скопировать код в буфер обмена
  1. $word = "putinvova";
  2. $num_right_chars = strlen($word)-5;
  3. $part1 = substr($word ,0,5); // Первая часть "putin"
  4. $part2 = substr($word ,-$num_right_chars); // Вторая часть "vova"

Думаю, что я просто не наткнулся на нужную функцию. Если это так, то подскажите.
 
 Top
Stierus Супермодератор
Отправлено: 18 Мая, 2011 - 18:32:04
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




 
My status
 Top
Deonis
Отправлено: 18 Мая, 2011 - 18:51:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




Stierus пишет:
http://ru.php.net/manual/en/function.str-split.php

Над этим я думал. Однако, если взять вышеприведённый пример, то код будет не намного лучше:
PHP:
скопировать код в буфер обмена
  1. $word = "putinvova";
  2. $arr = str_split($word);
  3. for($i=0;$i<5;$i++){
  4.         $part1 .= $arr[$i];
  5. }
  6. for($i=5;$i<=strlen($word);$i++){
  7.         $part2 .= $arr[$i];
  8. }
 
 Top
grefon
Отправлено: 18 Мая, 2011 - 19:15:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Deonis пишет:
Однако, если взять вышеприведённый пример, то код будет не намного лучше:

Не понял


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Deonis
Отправлено: 18 Мая, 2011 - 22:50:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




grefon пишет:


Пардон, но вы что-то упустли. В вашем примере получаем:
Array
(
[0] => put
[1] => inv
[2] => ova
)
но никак не
Array
(
[0] => putin
[1] => vova
)
Ладно, закроем тему. Я не особо надеялся, что подобные функции существуют. Способы решения есть, пусть и не очень удобные. Всё равно, спасибо за внимание.

(Отредактировано автором: 18 Мая, 2011 - 22:51:04)

 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Мая, 2011 - 22:59:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. preg_match("#^(\w{4})(\w{5})$#is","vovaputin",$out);
  3. print_r($out);
  4. ?>
 
 Top
grefon
Отправлено: 18 Мая, 2011 - 23:27:28
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




DeepVarvar пишет:
Я не особо надеялся, что подобные функции существуют.

О майн гаД!!! Вы серьезно? Не понял Не понял Не понял
А тройку на 5 поменять не догадались?



Я так скоро алкоголиком стану. Нахмурился


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Мая, 2011 - 23:52:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




grefon пишет:
Я так скоро алкоголиком стану.
Радость Взаимно...
 
 Top
EuGen Администратор
Отправлено: 19 Мая, 2011 - 09:10:22
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




grefon
Как я понял, автору нужно решить задачу:
0. Есть строка X длиной N
1. Дано число Y, 0<=Y<N
2. После разбиения имеем ровно две строки, длиной Y символов, и N-Y соответственно
Если делать при помощи str_split, то строка будет разбиваться не на 2 части а на столько, сколько раз Y влезает в N.
То есть если X='abcdefgh', а Y=2 то результатом должно быть 'ab' и 'cdefgh', но никак не 'ab', 'cd', 'ef', 'gh'
В этом случае для решения в одну функцию нужно модифицировать пример DeepVarvar, например, так:
PHP:
скопировать код в буфер обмена
  1. $X="abcdefgh";
  2. $Y=5;
  3. preg_match("/^(.{".$Y."})(.*)$/is",$X,$out);
  4. var_dump($out);


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Deonis
Отправлено: 19 Мая, 2011 - 09:27:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009  


Помог: 14 раз(а)




grefon пишет:
О майн гаД!!! Вы серьезно?

Более чем
grefon пишет:
А тройку на 5 поменять не догадались?

Не поверите, но синтаксис функции str_split знаю хорошо

Уже потом понял, что короткое слово в примере не лучший вариант.
И чтоб покончить с str_split, попробуйте именно с её помощью разделить "alkogolizm" на две части: "alko" и "golizm"
Повторюсь, что я не особо надеялся, что функция, которая могла бы облегчить мою задачу существует. Я её мог бы представить, как что-то в этом роде
some_func($str,$part,$num_chars);
Где $str - обрабатываемое слово, $part - на сколько частей делить, $num_chars - количество символов в частях, кроме остатка (в него попадёт о 0 до ~ символов)
Тогда это выглядело бы так:
some_func("охзаморочилтывсех",3,2);
На выходе мог бы быть массив "ох, за, морочилтывсех"

DeepVarvar пишет:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. preg_match("#^(\w{4})(\w{5})$#is","vovaputin",$out);
  3. print_r($out);
  4. ?>

Регулярка - как вариант. Надо будет потестить. Там задача не очень стандартная. Описать в двух словах не получится, а сочинение писать влом. Подмигивание

EuGen пишет:
grefon
Как я понял, автору нужно решить задачу .....

Вы правильно поняли Подмигивание Спс.

Всем большое спасибо, что потратили на меня время!

(Отредактировано автором: 19 Мая, 2011 - 09:49:53)

 
 Top
grefon
Отправлено: 19 Мая, 2011 - 09:55:20
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Deonis пишет:
отдельно взятое слово на части по заданному кол-ву символов

Извините, но Вы изначально неверно сформулировали вопрос. str_split как раз и разбивает слово по заданному кол-ву символов. О том что слово нужно бить на неравные куски Вы не говорили!


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
EuGen Администратор
Отправлено: 19 Мая, 2011 - 09:59:28
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Deonis
Для случая с произвольным числом отрезков можно использовать, к примеру, это:
PHP:
скопировать код в буфер обмена
  1. $string='abcdefghjkl';
  2. $length=3;
  3. $count=2;
  4. preg_match('/^'.str_repeat('(.{'.$length.'})', $count).'(.*)$/is', $string, $out);
  5. var_dump($out);

Хотя здесь все равно все происходит в 2 функции. Наверное, можно написать регулярное выражение с рекурсией, однако я не придумал как.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB