Помогите удалить строку

Discussion in 'PHP' started by Ru}{eeZ, 18 Nov 2008.

  1. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    Помогите удалить строку из файла по ид, ид = это первое число в строке. Уже всю голову переломал, чего только не пробовал, пробовал в массив весь файл через file() закидывать и по номеру строки удалять, но тогда другие сложности, ведь ид с номером строки не будет совпадать, пробовал регулярками искать и удалять.... В общем я вообще запутался, бошка уже кипит!
    помогите плиз :(

    уже и так пробовал:
    PHP:
              if(isset($_GET['id'])) {
                  
    $file_base file('../database/news.db');
                foreach(
    $file_base as $file_base2) {
                    list(
    $theme_id$theme_name$theme_body$theme_date) = split(':'$file_base2);
                    if(
    $_GET['id'] == $theme_id$_GET['id'] = $id; unset($file_base[$id]);
                   }
                   
    $fp_base fopen('../database/news.db''w');
                
    $file_imp implode(''$file_base);
                
    fputs($fp_base$file_imp);
                
    fclose($fp_base);
              }
    строки в базе типа -
    2:егьнгб:ама:18.11.08
     
  2. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    да, но если "4" встретится ещё до нужной мне строки? а если у строки ид будет "42"?
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Ru}{eeZ Ну люблю я регулярки))
    PHP:
      $ids '2:егьнгб:ама:18.11.08
    4:егьнгб:ама:18.11.08
    9:егьнгб:ама:18.11.08
    3:егьнгб:ама:18.11.08
    1:егьнгб:ама:18.11.08'


    $delid=4;
    $ids=preg_replace('#^'.preg_quote($delid).':[^\n]*$\n?#m','',$ids);
     
    _________________________
    #3 Gifts, 18 Nov 2008
    Last edited: 18 Nov 2008
  4. Buffalon

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

    Joined:
    22 Mar 2008
    Messages:
    241
    Likes Received:
    34
    Reputations:
    8
    ХМ чо то тупите ребята , а несудьба искать `4:`
    PHP:
    <?php 

    $ids 
    '2:егьнгб:ама:18.11.08 
    4:егьнгб:ама:18.11.08 
    9:егьнгб:ама:18.11.08 
    3:егьнгб:ама:18.11.08 
    1:егьнгб:ама:18.11.08'


    $id explode("\r\n"$ids); 

    foreach(
    $id as $idd){ 
        if(
    strpos($idd'4:') == false){ // 
            
    echo $idd.'<br/>'
        } 

    ?>
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Buffalon
    Ты сильно удивишься для входных данных:
    Code:
    34:егьнгб:ама:18.11.08 
    14:егьнгб:ама:18.11.08
    444444:егьнгб:ама:18.11.08
    2123544:егьнгб:ама:18.11.08
    1:егьнгбЧЕТЫРЕ4:ама:18.11.08
     
    _________________________
  6. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    Сделал вот так:

    PHP:
              if(isset($_GET['id'])) {
                  
    $file_base file('../database/news.db');
                foreach(
    $file_base as $file_base2){
                  if(
    strpos($file_base2$_GET['id'].':') === FALSE){
                    
    $cleared[] = $file_base2;
                  }
                }
                
    $fp_base fopen('../database/news.db''w');
                
    fputs($fp_baseimplode(''$cleared));
                
    fclose($fp_base);
              }
    всё бы хорошо, если б только не выводило ошибку (и не записывало пустоту) пр нахождении ещё одной такой цифры c ":" ))
     
    #6 Ru}{eeZ, 19 Nov 2008
    Last edited: 19 Nov 2008
  7. t4Nk

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

    Joined:
    23 Sep 2007
    Messages:
    70
    Likes Received:
    33
    Reputations:
    0
    вот, вроде работает :D

    PHP:
    if (!empty($_GET['id'])) {
        
    $db file('news.db');
        
    $f fopen('news.db''w');
        foreach (
    $db as $line) {
            list(
    $id$data) = explode(':'$line2);
            if (
    $id == $_GET['id']) continue;
            
    fputs($f$id.':'.$data);
            
        }
        
    fclose($f);
    }
     
    1 person likes this.