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

Форум АНТИЧАТ (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=92439)

Ru}{eeZ 18.11.2008 22:03

Помогите удалить строку
 
Помогите удалить строку из файла по ид, ид = это первое число в строке. Уже всю голову переломал, чего только не пробовал, пробовал в массив весь файл через 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

Jer1cho 18.11.2008 22:19

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/>';
    }
}
?>


Ru}{eeZ 18.11.2008 22:34

да, но если "4" встретится ещё до нужной мне строки? а если у строки ид будет "42"?

Jer1cho 18.11.2008 22:49

PHP код:

<?php

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

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

foreach(
$id as $idd){
    
$iddd = (explode(':'$idd)) ? $idd[0] : false;
    if(
strpos($iddd'4') === false){
        echo 
$idd.'<br/>';
    }
}
?>


Gifts 19.11.2008 00:52

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


Buffalon 19.11.2008 01:14

Цитата:

Сообщение от Ru}{eeZ
да, но если "4" встретится ещё до нужной мне строки? а если у строки ид будет "42"?

ХМ чо то тупите ребята , а несудьба искать `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/>'
    } 

?>


Gifts 19.11.2008 01:43

Buffalon
Ты сильно удивишься для входных данных:
Код:

34:егьнгб:ама:18.11.08
14:егьнгб:ама:18.11.08
444444:егьнгб:ама:18.11.08
2123544:егьнгб:ама:18.11.08
1:егьнгбЧЕТЫРЕ4:ама:18.11.08


Ru}{eeZ 19.11.2008 16:45

Сделал вот так:

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 ":" ))

t4Nk 19.11.2008 17:03

вот, вроде работает :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);




Время: 11:10