[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Массив
M1cR0
Здравствуйте. вот, столкнулся с такой проблемой.

Значит так, есть массив данных, индексы у который имеют числовые значения.
Нужно:
По заданному индексу удалить значение и "передвинуть" оставшуюся часть.
Вот на примере:

Имеем массив
Код
$a = array(0 => 'test', 1 => 'test1', 2=> 'test2');

Нужно удалить значение массива по индексу, например по индексу 2, и должны получить такое:
Код
$a = array(0 => 'test1', 2 => 'test3');

Надеюсь суть ясна 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); //уничтожаем ненужный массив
   }

Вот собственно такая вот реализация получилась. Интерисует производительность, может кто предложит варианты более быстрые и ресурсоемкие?



Спустя 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);
}

?>



Спустя 11 минут, 22 секунды (6.04.2008 - 13:13) M1cR0 написал(а):
Благодарю


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.