Как разбить строку "30*60, 60*60, 22,5*90;" на подстроки?

P
На сайте с 06.01.2009
Offline
601
772

Ребят, прошу помочь. Никак не справиться с задачей.

Есть строка

$stringf = "30*60, 60*60, 22,5*90;"

Как записать в переменнные

$stringf1,2,3 и т.д. не известно сколько их поочередно все значения которые состоят из чисел и *.

Т.е. в первую - 30*60, во вторую - 60*60, в третью 22,5*90 и т.д. Их может быть и больше.

Спасибо заранее

CE
На сайте с 30.01.2008
Offline
73
#1

Если пробелы действительно есть, то разбивай split-ом по пробелу, потом допиливай немного

P
На сайте с 06.01.2009
Offline
601
#2
CHEM_Eugene:
Если пробелы действительно есть, то разбивай split-ом по пробелу, потом допиливай немного

Дело в том, что у последнего значения в строке не пробел, а ";" - этим кончается строка. Хотя нужно подумать.

Подскажите, http://www.php.ru/manual/function.split.html

а как этио применить если не известно сколько на выходе получается переменных ?

ewg777
На сайте с 04.06.2007
Offline
225
#3

explode()))))
edka
На сайте с 17.01.2010
Offline
208
#4

Разбивай explode ($string, ", ");

Но это если точно известно, что значения разделяются запятой и пробелом.

А потом у последнего значения отбрасывать точку с запятой (не помню точно какая функция, но есть такая, что отбрасывает последний символ в строке).

А вообще есть хороший сайт: php.su :)

P
На сайте с 06.01.2009
Offline
601
#5

Помогите, пожалуйста, делаю

	sort($strokarazmerarr); 

где собственно записаны значения

30*60

60*60

60*120

почему то после сортировки 60*60 послений, но по идее мне нужен последним 60*120

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#6
postavkin:
почему то после сортировки 60*60 послений, но по идее мне нужен последним 60*120

А как вы себе представляете сортировку по алфавиту? Да, 1 идет раньше 6.

L
На сайте с 07.12.2007
Offline
351
#7
$str = "30*60, 60*60, 22,5*90;";
preg_match_all('|(\d+,*\d+\*\d+,*\d+)|', $str, $arr);
print_r($arr[1]);

Результаты надо брать из массива $arr[1] (тк в $arr[0][] - найденные совпадения, и они могут отличаться от результатов)

Если допустимы рузультаты с ',' на конце:

[0] => 30*60,

[1] => 60*60,

[2] => 22,5*90,

Регулярку можно сделать проще:

preg_match_all('|([\d,\*]+)|', $str, $arr);

Если результаты нужны не в массиве, а именно в переменных:

$stringf1, $stringf2, $stringf3, $stringf4, $stringf5 и тд по числу результатов - напиши, расскажу как их создать динамически.

PS: Для сортировки как ты хочешь нужна функция usort и написать к ней функцию сравнения, примеры там есть.

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#8
Ladycharm:
$str = "30*60, 60*60, 22,5*90;";
preg_match_all('|(\d+[,]*\d+\*\d+[,]*\d+)|', $str, $arr);
Результаты надо брать из массива $arr[1] (тк в $arr[0][] - найденные совпадения, и они могут отличаться от результатов)

Если допустимы рузультаты с ',' на конце:
[0] => 30*60,
[1] => 60*60,
[2] => 22,5*90,
Регулярку можно сделать проще:

Браво, Кэп! Только у ТС уже есть массив $strokarazmerarr, и он хочет его сортировать(

PR
На сайте с 30.12.2007
Offline
140
#9


$array = array('60*120', '30*60', '60*60');
natsort($array);

foreach ($array as $element)
{
echo $element . PHP_EOL;
}

30*60
60*60
60*120

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий