Сепаратор с условием в массиве

Discussion in 'PHP' started by Foster, 25 May 2010.

  1. Foster

    Foster Elder - Старейшина

    Joined:
    14 Jul 2005
    Messages:
    80
    Likes Received:
    9
    Reputations:
    2
    Разделитель строк с условием в массиве

    Не могу в скрипте организовать сепаратор в виде пунктиров "---" в одну строку, для того что бы после сортировки разделять разные им строки с разными уидами.
    Под уидами я подразумеваю содержимое первых квадратных скобок в каждой строке: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>"
          }
     
    #1 Foster, 25 May 2010
    Last edited: 25 May 2010
  2. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    ну переносы строк \n заменить на ----?
     
  3. Foster

    Foster Elder - Старейшина

    Joined:
    14 Jul 2005
    Messages:
    80
    Likes Received:
    9
    Reputations:
    2
    Я видно не совсем правильно изложил свою мысль.

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

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,325
    Likes Received:
    1,199
    Reputations:
    252
    preg_match + array_unique
     
  5. Foster

    Foster Elder - Старейшина

    Joined:
    14 Jul 2005
    Messages:
    80
    Likes Received:
    9
    Reputations:
    2
    Прости не совсем понял тебя, array_unique удаляет повторяющиеся элементы в массиве. Мне же нужно их сохранить. И как я писал выше разделить пачку одинаковых уидов символом дефиса "-"
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    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>
     
  7. Foster

    Foster Elder - Старейшина

    Joined:
    14 Jul 2005
    Messages:
    80
    Likes Received:
    9
    Reputations:
    2
    2 Pashkela:
    Не совсем, ведь условие
    PHP:
    $m[1][0] == $m[1][1]
    Сравнивает значения в первых и вторых круглых скобках в строке. А нужно сравнивать первое вхождение квадратных скобок со скобками последующих строк

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

    Foster Elder - Старейшина

    Joined:
    14 Jul 2005
    Messages:
    80
    Likes Received:
    9
    Reputations:
    2
    В принципе работает, но почему-то ставит дифизы перед последней строкой с одинаковым уидом, отсекая тем самым её от остальной пачки в которой по сути и должна находится.

    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>"; }
    ?> 
    Вот что примерно получается
     
  9. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    а так?

    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]; 
    }
    ?>
     
Loading...
Similar Threads - Сепаратор условием массиве
  1. 380935901807hd
    Replies:
    1
    Views:
    1,404
  2. winston14
    Replies:
    4
    Views:
    1,098
  3. Filipp
    Replies:
    5
    Views:
    1,360
  4. zeroDay27
    Replies:
    2
    Views:
    996