Тема почерпнута из вопроса новичка на php.ru/forum; а решение вполне достойно того, чтобы продублировать здесь, в этом разделе. Итак, как бы вы отнеслись к необходимости из строчки
Code:
ID005 Ролл Дракон маки 380 руб. 1 = 380 ID007 Ролл Икура маки 220 руб. 3 = 220 ID008 Ролл Кавагиши 220 руб. 8 = 220 ID009 Ролл Калифорния 220 руб. 6 = 220
убрать все лишнее средствами php, оставив только идентификаторы и количество?
Быстрое решение "на коленке", в стиле студии Артемия Лебедева ("вот так это было, и вот так нам пришлось помучиться") выглядело как-то так:
Code:
<?
$string = 'ID005 Ролл Дракон маки 380 руб. 1 = 380 ID007 Ролл Икура маки 220 руб. 3 = 220 ID008 Ролл Кавагиши 220 руб. 8 = 220 ID009 Ролл Калифорния 220 руб. 6 = 220';
$a = explode("ID", $string);
$arr = preg_replace('/[^0-9]/', ' ', $a);
$c = implode(" ",$arr);
$string=preg_replace('/ {2,}/',',',$c);
$array = explode(',', $string);
foreach ($array as $k=>$v) {
if ($k % 2 != 1)
$b[] = $v;
}
$d = implode(" ",$b);
echo $d; // 005 1 007 3 008 8 009 6
, более же компактное и грамотное решение состояло в следующем:
Code:
<?
$s = 'ID005 Ролл Дракон маки 380 руб. 1 = 380 ID007 Ролл Икура маки 220 руб. 3 = 220 ID008 Ролл Кавагиши 220 руб. 8 = 220 ID009 Ролл Калифорния 220 руб. 6 = 220';
echo(rtrim(preg_replace('/ID(\d+).+?(\d+) = \d+( |$)/', '$1#$2,', $s), ',')); //005#1,007#3,008#8,009#6
Сравнение двух подходов к решению проблемы представляет интерес, мотаем на ус, а вдруг пригодится кому.