PDA

Просмотр полной версии : Помогите удалить строку


Ru}{eeZ
18.11.2008, 22:03
Помогите удалить строку из файла по ид, ид = это первое число в строке. Уже всю голову переломал, чего только не пробовал, пробовал в массив весь файл через file() закидывать и по номеру строки удалять, но тогда другие сложности, ведь ид с номером строки не будет совпадать, пробовал регулярками искать и удалять.... В общем я вообще запутался, бошка уже кипит!
помогите плиз :(

уже и так пробовал:

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

$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

$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 Ну люблю я регулярки))
$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
да, но если "4" встретится ещё до нужной мне строки? а если у строки ид будет "42"?
ХМ чо то тупите ребята , а несудьба искать `4:`

<?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
Сделал вот так:


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_base, implode('', $cleared));
fclose($fp_base);
}


всё бы хорошо, если б только не выводило ошибку (и не записывало пустоту) пр нахождении ещё одной такой цифры c ":" ))

t4Nk
19.11.2008, 17:03
вот, вроде работает :D


if (!empty($_GET['id'])) {
$db = file('news.db');
$f = fopen('news.db', 'w');
foreach ($db as $line) {
list($id, $data) = explode(':', $line, 2);
if ($id == $_GET['id']) continue;
fputs($f, $id.':'.$data);

}
fclose($f);
}