Значит так, есть массив данных, индексы у который имеют числовые значения.
Нужно:
По заданному индексу удалить значение и "передвинуть" оставшуюся часть.
Вот на примере:
Имеем массив
Код
$a = array(0 => 'test', 1 => 'test1', 2=> 'test2');
Нужно удалить значение массива по индексу, например по индексу 2, и должны получить такое:
Код
$a = array(0 => 'test1', 2 => 'test3');
Надеюсь суть ясна
![smile.gif](html/emoticons/smile.gif)
Сам реализовал вот так:
Код
if(isset($_POST['del'], $_POST['id'])) { //если получен ид, и выбрано удаление:
foreach($_POST['id'] as $id) { // $_POST['id'] - массив выбранных индексов
unset($db[$id]); // $db - тот массив, выбранные значения которого нужно очистить
}
$i = 0;
$new = array(); // создаем новый массив
$new = $db; //копируемся
$db = array(); // очищаем "главный" массив
foreach ($new as $ndb) {
$db[$i++] = $ndb; //заносим новое значение
}
unset($new); //уничтожаем ненужный массив
}
foreach($_POST['id'] as $id) { // $_POST['id'] - массив выбранных индексов
unset($db[$id]); // $db - тот массив, выбранные значения которого нужно очистить
}
$i = 0;
$new = array(); // создаем новый массив
$new = $db; //копируемся
$db = array(); // очищаем "главный" массив
foreach ($new as $ndb) {
$db[$i++] = $ndb; //заносим новое значение
}
unset($new); //уничтожаем ненужный массив
}
Вот собственно такая вот реализация получилась. Интерисует производительность, может кто предложит варианты более быстрые и ресурсоемкие?
Спустя 11 часов, 26 минут, 56 секунд (6.04.2008 - 13:02) AnonimUser написал(а):
ИМХО не нужно создавать еще один массив $new
Код
<?php
$db = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
$_POST['del'] = true;
$_POST['id'] = array(4, 7, 10, 13, 17);
if(isset($_POST['del'], $_POST['id']))
{
foreach($_POST['id'] as $id)
{
unset($db[$id]);
}
$db = array_slice($db, 0);
print_r($db);
}
?>
$db = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
$_POST['del'] = true;
$_POST['id'] = array(4, 7, 10, 13, 17);
if(isset($_POST['del'], $_POST['id']))
{
foreach($_POST['id'] as $id)
{
unset($db[$id]);
}
$db = array_slice($db, 0);
print_r($db);
}
?>
Спустя 11 минут, 22 секунды (6.04.2008 - 13:13) M1cR0 написал(а):
Благодарю
_____________