Как убрать пустые элементы массива?

Не о CI, но о PHP, интерфейсах и веб-проограммировании

Как убрать пустые элементы массива?

Сообщение Big_Shark » 08 дек 2008, 04:24

Кто как убирает пустые элементы масcива подскажите какой либо нормальный способ.
сейчас я убираю так
Код: Выделить всё
foreach ($array as $key=>$val)
{
   if(!$array[$key])
   {
      unset($array[$key]);
   }
}
Отвечу на ваши вопросы по CodeIgniter и Kohana3
Благодарности принимаются тут: 41001216991355 (ЯД)
Big_Shark
Модератор
 
Сообщения: 1307
Зарегистрирован: 03 фев 2009, 02:12
Откуда: Владивосток

Re: Как убрать пустые элементы массива?

Сообщение Ladygin » 08 дек 2008, 07:25

А как вы получаете этот массив?
Coolweb.su
Здесь я слушаю музыку слушать mp3
Аватара пользователя
Ladygin
 
Сообщения: 72
Зарегистрирован: 30 май 2008, 06:13
Откуда: Псков

Re: Как убрать пустые элементы массива?

Сообщение Big_Shark » 08 дек 2008, 07:47

хм забавный вопрос )
Код: Выделить всё
if($array=explode($this->separator,get_cookie($this->nameTRUE,'auto')))    $this->array=$array;
else 
$this->array=array();
 

и потом вызываю функцию add
Код: Выделить всё
    
function add($id)
{
  
$this->array[]=$id;
  
$this->set_cookie();
Отвечу на ваши вопросы по CodeIgniter и Kohana3
Благодарности принимаются тут: 41001216991355 (ЯД)
Big_Shark
Модератор
 
Сообщения: 1307
Зарегистрирован: 03 фев 2009, 02:12
Откуда: Владивосток

Re: Как убрать пустые элементы массива?

Сообщение Ozzy » 19 фев 2009, 17:19

В php нет встроенной функции удаления пустых элементов массива.
Каждый делает как ему удобнее, ваш способ тоже имеет право на жизнь.

также один из вариантов из интернета:
Код: Выделить всё
function Clear_array_empty($array)
{
$ret_arr = array();
foreach($array as $val)
{
    if (!empty($val))
    {
        $ret_arr[] = trim($val);
    }
}
return $ret_arr;
}
Аватара пользователя
Ozzy
 
Сообщения: 161
Зарегистрирован: 17 фев 2009, 01:08
Откуда: Одесса

Re: Как убрать пустые элементы массива?

Сообщение Artem » 19 фев 2009, 17:55

Код: Выделить всё
function unset_empty_values(array $array) {
    function filter_unset($value) {
        return !empty($value);
    }
    return array_filter($array, "filter_unset");
}

$array = array ("", "1", "2", "", "4");
$result = unset_empty_values($array);
print_r($result);
Artem
 
Сообщения: 61
Зарегистрирован: 19 фев 2009, 17:49

Re: Как убрать пустые элементы массива?

Сообщение Ozzy » 19 фев 2009, 18:34

можна и так тогда:
Код: Выделить всё
function array_clean ($array, $todelete = false, $caseSensitive = false) {
    foreach($array as $key => $value) {
        if(is_array($value)) {
            $array[$key] = array_clean($array[$key], $todelete, $caseSensitive);
        }
        else {
            if($todelete) {
                if($caseSensitive) {
                    if(strstr($value ,$todelete) !== false)
                        unset($array[$key]);
                }
                else {
                    if(stristr($value, $todelete) !== false)
                        unset($array[$key]);
                }
            }
            elseif (empty($value)) {
                unset($array[$key]);
            }
        }
    }
    return $array;
}


Вобщем листай коменты к функции http://www.php.net/manual/ru/function.array-filter.php
Аватара пользователя
Ozzy
 
Сообщения: 161
Зарегистрирован: 17 фев 2009, 01:08
Откуда: Одесса

Re: Как убрать пустые элементы массива?

Сообщение Big_Shark » 19 фев 2009, 18:41

Спасибо всем)
Я увидел много больших и ненужных функций) ну да ладно) лучше по старинки буду делать как всегда делал)
Отвечу на ваши вопросы по CodeIgniter и Kohana3
Благодарности принимаются тут: 41001216991355 (ЯД)
Big_Shark
Модератор
 
Сообщения: 1307
Зарегистрирован: 03 фев 2009, 02:12
Откуда: Владивосток

Re: Как убрать пустые элементы массива?

Сообщение Ozzy » 19 фев 2009, 20:10

в принципе все написанные функции аналогичны твоей проверке. т.к. используют либо логическое отрицание либо проверку через empty().
в последней функции что я кинул еще встроена проверка если элемент массива содержыт вложенный массив то рекурсивно проверяются и его элементы что тоже верно. так что каждый использует то что ему удобнее
Аватара пользователя
Ozzy
 
Сообщения: 161
Зарегистрирован: 17 фев 2009, 01:08
Откуда: Одесса

Re: Как убрать пустые элементы массива?

Сообщение Big_Shark » 24 фев 2009, 03:23

Странно что в PHP нету встроенной функции
Отвечу на ваши вопросы по CodeIgniter и Kohana3
Благодарности принимаются тут: 41001216991355 (ЯД)
Big_Shark
Модератор
 
Сообщения: 1307
Зарегистрирован: 03 фев 2009, 02:12
Откуда: Владивосток

Re: Как убрать пустые элементы массива?

Сообщение Алексей Новиков » 10 мар 2009, 13:41

Big_Shark писал(а):Спасибо всем)
Я увидел много больших и ненужных функций) ну да ладно) лучше по старинки буду делать как всегда делал)


Но одна из них будет работать быстрее. Та, в которой массив обходится не через foreach (за это руки отбивать надо), а специально предназначенной для этого функцией array_filter:

Код: Выделить всё
function unset_empty_values(array $array) {
    function filter_unset($value) {
        return !empty($value);
    }
    return array_filter($array, "filter_unset");
}


http://www.php.ru/manual/function.array-filter.html
http://www.php.ru/manual/ref.array.html

Программируйте правильно.
Алексей Новиков
 
Сообщения: 1
Зарегистрирован: 10 мар 2009, 13:26

Re: Как убрать пустые элементы массива?

Сообщение Ozzy » 10 мар 2009, 13:51

Нам смертным таких скачков в скорости на глаз не заметить :D
Аватара пользователя
Ozzy
 
Сообщения: 161
Зарегистрирован: 17 фев 2009, 01:08
Откуда: Одесса

Re: Как убрать пустые элементы массива?

Сообщение andead » 10 мар 2009, 14:33

вот неплохой вариант: array_diff($array, array(''));
Аватара пользователя
andead
 
Сообщения: 97
Зарегистрирован: 02 фев 2009, 18:49

Re: Как убрать пустые элементы массива?

Сообщение Artem » 10 мар 2009, 16:54

Ozzy писал(а):Нам смертным таких скачков в скорости на глаз не заметить :D


вариант с foreach кстати будет быстрее.
array_diff почти также
и array_filter в 2 раза медленнее
Artem
 
Сообщения: 61
Зарегистрирован: 19 фев 2009, 17:49

Re: Как убрать пустые элементы массива?

Сообщение patt » 29 сен 2009, 11:57

функция unset_empty_values - может и "правильная" но баганая: при повторном вызове пытается переобьявить ф-ю filter_unset
patt
 
Сообщения: 1
Зарегистрирован: 29 сен 2009, 11:52


Вернуться в Общие вопросы по PHP и веб-программированию

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0