PDA

Просмотр полной версии : Сепаратор с условием в массиве


Foster
25.05.2010, 00:55
Не могу в скрипте организовать сепаратор в виде пунктиров "---" в одну строку, для того что бы после сортировки разделять разные им строки с разными уидами.
Под уидами я подразумеваю содержимое первых квадратных скобок в каждой строке:1234,107,357,1234
В идеале после обработки текста скриптом должно получится так: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] --------------------------------------------------------------------------------------------

Ниже код скрипта, я не стал его коверкать и выложил не тронутый моей идеей вариант

$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>";
}

Chaak
25.05.2010, 02:13
ну переносы строк \n заменить на ----?

Foster
25.05.2010, 02:18
Я видно не совсем правильно изложил свою мысль.

Не кажду строку надо отделять а только те и только пачками(по 2ум и более строкам) которые после сортировки содежат одинаковые юиды. В данном случаи [1234], это первая и 4ая строки. Они должны отделяться отовсех других строк разделителем "-------"

Isis
25.05.2010, 09:07
preg_match + array_unique

Foster
25.05.2010, 15:37
preg_match + array_unique
Прости не совсем понял тебя, array_unique удаляет повторяющиеся элементы в массиве. Мне же нужно их сохранить. И как я писал выше разделить пачку одинаковых уидов символом дефиса "-"

Pashkela
25.05.2010, 15:46
2 Foster: оно?


<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>

Foster
25.05.2010, 16:13
2 Pashkela:
Не совсем, ведь условие $m[1][0] == $m[1][1] Сравнивает значения в первых и вторых круглых скобках в строке. А нужно сравнивать первое вхождение квадратных скобок со скобками последующих строк

Мне надо как уже писал отделить пачки одинаковых юидов.

Foster
25.05.2010, 16:54
В принципе работает, но почему-то ставит дифизы перед последней строкой с одинаковым уидом, отсекая тем самым её от остальной пачки в которой по сути и должна находится.


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>"; }
?>


Вот что примерно получается
-----------------------------------------------------------------------------------------------
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]

Pashkela
25.05.2010, 17:26
а так?


<?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];
}
?>