Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Сепаратор с условием в массиве (https://forum.antichat.xyz/showthread.php?t=206591)

Foster 25.05.2010 00:55

Разделитель строк с условием в массиве
 
Не могу в скрипте организовать сепаратор в виде пунктиров "---" в одну строку, для того что бы после сортировки разделять разные им строки с разными уидами.
Под уидами я подразумеваю содержимое первых квадратных скобок в каждой строке: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>"
      } 


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

Цитата:

Сообщение от Isis
preg_match + array_unique

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

Pashkela 25.05.2010 15:46

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>


Foster 25.05.2010 16:13

2 Pashkela:
Не совсем, ведь условие
PHP код:

$m[1][0] == $m[1][1

Сравнивает значения в первых и вторых круглых скобках в строке. А нужно сравнивать первое вхождение квадратных скобок со скобками последующих строк

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

Foster 25.05.2010 16:54

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

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

Вот что примерно получается
Цитата:

-----------------------------------------------------------------------------------------------
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 код:

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



Время: 01:53