Просмотр полной версии : Помогите удалить строку
Помогите удалить строку из файла по ид, ид = это первое число в строке. Уже всю голову переломал, чего только не пробовал, пробовал в массив весь файл через 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
<?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/>';
}
}
?>
да, но если "4" встретится ещё до нужной мне строки? а если у строки ид будет "42"?
<?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/>';
}
}
?>
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/>';
}
}
?>
Buffalon
Ты сильно удивишься для входных данных:
34:егьнгб:ама:18.11.08
14:егьнгб:ама:18.11.08
444444:егьнгб:ама:18.11.08
2123544:егьнгб:ама:18.11.08
1:егьнгбЧЕТЫРЕ4:ама:18.11.08
Сделал вот так:
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 ":" ))
вот, вроде работает :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);
}
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot