Разделитель строк с условием в массиве Не могу в скрипте организовать сепаратор в виде пунктиров "---" в одну строку, для того что бы после сортировки разделять разные им строки с разными уидами. Под уидами я подразумеваю содержимое первых квадратных скобок в каждой строке:1234,107,357,1234 В идеале после обработки текста скриптом должно получится так: PHP: 13.05.2010 22:20:38 Продал (0.0.0.0) за 49 для ник [107] (0.0.0.0) Зелье [39235296] (50) [7/7] 13.05.2010 22:21:29 Продал (0.0.0.0) за 49 для ник [357] (0.0.0.0) Зелье [39235287] (50) [7/7] -------------------------------------------------------------------------------------------- 13.05.2010 00:13:01 Купил (0.0.0.0) за 132 у ник [1234] (0.0.0.0) Сумка [27180101] (132) [132/132] 13.05.2010 00:13:54 Продал (0.0.0.0) за 132 у ник [1234] (0.0.0.0) Сумка [27180101] (132) [132/132] -------------------------------------------------------------------------------------------- Ниже код скрипта, я не стал его коверкать и выложил не тронутый моей идеей вариант PHP: $str='13.05.2010 00:13:13 Купил (0.0.0.0) за 132 у ник [1234] (0) Сумка [27180101] (132) [132/132] 13.05.2010 22:20:38 Продал (0.0.0.0) за 49 для ник [107] (0.0.0.0) Зелье [39235296] (50) [7/7] 13.05.2010 22:21:29 Продал (0.0.0.0) за 49 для ник [357] (0.0.0.0) Зелье [39235287] (50) [7/7] 13.05.2010 00:13:42 Купил (0.0.0.0) за 132 у ник [1234] (0) Сумка [27180101] (132) [132/132] '; $strArr=explode("\r\n",$str); foreach ($strArr as $key => $value) { $check=preg_match_all('#\((.+?)\)#',$strArr[$key],$m); if($m[1][0] == $m[1][1]) { $strArr[$key]="<b><span style=\"background-color: red; color: white\">$strArr[$key]</span></b>"; } $uid=preg_match('#^.+?\[(\w+\w)\]#',$strArr[$key],$m); $uid=$m[1]; $ar[$key]=$uid; echo"<pre>"; } asort($ar); foreach ($ar as $key => $value) { echo "$strArr[$key]<br>"; }
Я видно не совсем правильно изложил свою мысль. Не кажду строку надо отделять а только те и только пачками(по 2ум и более строкам) которые после сортировки содежат одинаковые юиды. В данном случаи [1234], это первая и 4ая строки. Они должны отделяться отовсех других строк разделителем "-------"
Прости не совсем понял тебя, array_unique удаляет повторяющиеся элементы в массиве. Мне же нужно их сохранить. И как я писал выше разделить пачку одинаковых уидов символом дефиса "-"
2 Foster: оно? PHP: <pre> <?php $str='13.05.2010 00:13:13 Купил (0.0.0.0) за 132 у ник [1234] (0) Сумка [27180101] (132) [132/132] 13.05.2010 22:20:38 Продал (0.0.0.0) за 49 для ник [107] (0.0.0.0) Зелье [39235296] (50) [7/7] 13.05.2010 22:21:29 Продал (0.0.0.0) за 49 для ник [357] (0.0.0.0) Зелье [39235287] (50) [7/7] 13.05.2010 00:13:42 Купил (0.0.0.0) за 132 у ник [1234] (0) Сумка [27180101] (132) [132/132] '; $strArr=explode("\r\n",$str); foreach ($strArr as $key => $value) { $check=preg_match_all('#\((.+?)\)#',$strArr[$key],$m); if($m[1][0] == $m[1][1]) { $strArr[$key]="$strArr[$key]<br>-----------------"; } $uid=preg_match('#^.+?\[(\w+\w)\]#',$strArr[$key],$m); $uid=$m[1]; $ar[$key]=$uid; echo"<pre>"; } asort($ar); foreach ($ar as $key => $value) { echo "$strArr[$key]<br>"; } ?> <pre>
2 Pashkela: Не совсем, ведь условие PHP: $m[1][0] == $m[1][1] Сравнивает значения в первых и вторых круглых скобках в строке. А нужно сравнивать первое вхождение квадратных скобок со скобками последующих строк Мне надо как уже писал отделить пачки одинаковых юидов.
В принципе работает, но почему-то ставит дифизы перед последней строкой с одинаковым уидом, отсекая тем самым её от остальной пачки в которой по сути и должна находится. PHP: asort($ar); //print_r ($ar); foreach ($ar as $key => $value) if (current($ar) !== next($ar)) { echo "<font color='blue'>$strArr[$key]</font><br>-----------------------------------------------------------------------------------------------<br>"; } else { echo "$strArr[$key]<br>"; } ?> Вот что примерно получается
а так? PHP: <?php $str='15.05.2010 13:45:36 Купил (94.228.116.88) за 295 у Slim zdrt [1941244] (95.153.69.250) Фронтовые 100 грамм [39168658] (150 NV) [9/10] 16.03.2010 09:13:16 Продал (94.228.116.88) за 690 для EvilBella [1960627] (89.235.248.233) Телескопическая Удочка [37846893] (700 NV) [700/700] 16.03.2010 09:13:59 Продал (94.228.116.88) за 986 для EvilBella [1960627] (89.235.248.233) Телескопический Спиннинг [36740596] (1000 NV) [1000/1000] 29.04.2010 15:14:06 Продал (94.228.116.88) за 780 для blood dragon [1994652] (83.139.42.106) Доспех Риска [23104249] (790 NV) [120/120] 29.04.2010 14:54:06 Купил (94.228.116.88) за 2750 у blood dragon [1994652] (83.139.42.106) Наручи Атланта [32716583] (550 NV) [100/100] 29.04.2010 15:18:52 Продал (94.228.116.88) за 619 для blood dragon [1994652] (83.139.42.106) Наручи Смятения (ап) [11620844] (599 NV) [80/80] 29.04.2010 15:18:13 Продал (94.228.116.88) за 255 для blood dragon [1994652] (83.139.42.106) Шлем Недосягаемости [38189612] (260 NV) [70/70] 29.04.2010 15:16:02 Продал (94.228.116.88) за 393 для blood dragon [1994652] (83.139.42.106) Кристальное Кольцо (ап) [15155908] (398 NV) [70/70] 29.04.2010 15:04:34 Продал (94.228.116.88) за 316 для blood dragon [1994652] (83.139.42.106) Кольчуга Ратника [38809645] (320 NV) [100/100] 29.04.2010 15:21:24 Продал (94.228.116.88) за 324 для blood dragon [1994652] (83.139.42.106) Таинственные Перчатки (ап) [20000233] (324 NV) [40/40] 29.04.2010 15:05:55 Продал (94.228.116.88) за 281 для blood dragon [1994652] (83.139.42.106) Кольчуга Зрелости [23193796] (285 NV) [90/90] 29.04.2010 15:07:45 Продал (94.228.116.88) за 415 для blood dragon [1994652] (83.139.42.106) Кольчуга Агрессии (ап) [11620837] (420 NV) [90/90] 29.04.2010 15:22:54 Продал (94.228.116.88) за 544 для blood dragon [1994652] (83.139.42.106) Перчатки Скованности (ап) [11620841] (550 NV) [70/70] 29.04.2010 15:15:01 Продал (94.228.116.88) за 235 для blood dragon [1994652] (83.139.42.106) Печатка Предела (ап) [8864064] (238 NV) [45/45] 17.04.2010 02:24:15 Купил (94.228.116.88) за 65 у Взломанный Дорогой [1996638] (213.180.111.175) Зелье Сильной Спины [38495752] (50 NV) [7/7] 20.05.2010 18:10:08 Купил (94.228.116.88) за 600 у Вёрткий [2003482] (193.107.109.65) Зелье Панциря [39355493] (150 NV) [3/3] '; $strArr=explode("\r\n",$str); $temp=""; foreach ($strArr as $key => $value) { preg_match('#^.+?\[(\w+\w)\]#',$value,$m); if ($temp!=$m[1]){ echo "<br>---------------------<br>" . $value; } else { echo "<br>" . $value; } $temp=$m[1]; } ?>