2010-03-10 3 views

ответ

9

Вы ищете array_filter функции ;-)


Например, эта часть кода:

$arr = array(null, 0, null, 0, '', null, '', 4, 6, '',); 
$arr_filtered = array_filter($arr); 
var_dump($arr_filtered); 

даст вам следующий вывод:

array 
    7 => int 4 
    8 => int 6 

Обратите внимание, что все "falsy" значения были удалены.


И если вы хотите быть более конкретным, вы можете указать свою собственную функцию фильтрации. Например, чтобы удалить только null S из массива, я мог бы использовать это:

function my_filter($item) { 
    if ($item === null) { 
     return false; 
    } 
    return true; 
} 

$arr = array(null, 0, null, 0, '', null, '', 4, 6, '',); 
$arr_filtered = array_filter($arr, 'my_filter'); 
var_dump($arr_filtered); 

И я получаю:

array 
    1 => int 0 
    3 => int 0 
    4 => string '' (length=0) 
    6 => string '' (length=0) 
    7 => int 4 
    8 => int 6 
    9 => string '' (length=0) 
+2

Примечание: без явного обратного вызова также будут отфильтрованы значения 0, «0» и «NULL». – LiraNuna

+0

@ LiraNuna: Я отредактировал свой ответ на примере, который иллюстрирует это; спасибо за примечание :-) –

+0

И для удаления только нулей следует определить функцию обратного вызова. Это функция лямбда-стиля подходит. 'array_filter ($ arr, create_function ('$ v', 'return $ v! == NULL? TRUE: FALSE'));' – doc

1

Похоже, домашнее задание для меня.

Я предлагаю вам взглянуть на функцию array_filter. Кажется, это самый подходящий вариант.

2

Вот еще один способ:

<?php 

$array = array(
    0 => 0, 
    1 => , 
    2 => '', 
    3 => 4, 
    4 => 6, 
    5 => null 
); 

foreach($array as $a) 
{ 
    if(!empty($a) AND $a != NULL AND $a != 0) // NULL, 0 
    { 
     $new_array[] = $a; 
    } 
} 

print_r($new_array); 

?> 

выход будет:

Array 
(
    [0] => 4 
    [1] => 6 
) 
+0

Вам не нужно проверять, свободен ли массив внутри цикла foreach. Результат оператора '! =' В случае a = 0 или a = NULL будет таким же. Вы определенно должны допускать «нулевые» строки. Вы, вероятно, молодой разработчик, продолжайте, но, пожалуйста, исправьте или удалите этот пост. – doc

+0

@doc Спасибо в первую очередь. Да, я молод, но это ничего не значит. Это так, как он этого хочет, да, моя первая версия только проверила нуль и «», но я думаю, может быть, он тоже этого хочет, не может быть, он может изменить if(), как он этого хочет, это была просто идея ... Мой код делает то, что он хочет? Да, это так ... Если вы хотите, вы можете отредактировать его :) – ahmet2106

Смежные вопросы