2010-04-16 14 views
30

null değerlerini ortadan kaldırmak için array_filter ile bir diziyi filtrelerseniz, tuşlar korunur ve dizide bu "delikler" oluşturulur. Ör:Anahtar koruma olmadan php array_filter

The filtered version of 
    [0] => 'foo' 
    [1] => null 
    [2] => 'bar' 
is 
    [0] => 'foo' 
    [2] => 'bar' 

nasıl alabilirim yerine

[0] => 'foo' 
[1] => 'bar' 

? Teşekkürler

cevap

0

bu girişi kullanarak: Eğer bunu yapabileceği birkaç yolu vardır

$array=['foo',NULL,'bar',0,false,null,'0','']; 

. Demo

O, bu önemli bilgiler muhtemelen proje/görevle ilgili biraz konu dışı array_filter 'ın açgözlü varsayılan davranışı getirmek için, ama bu sayfaya Googling eğer olduğunu var

:

var_export(array_values(array_filter($array))); // NOT GOOD!!!!! 

Kötü Çıktı :

: çalışacak yollarını Şimdi

array (
    0 => 'foo', 
    1 => 'bar', 
) 

Yöntem 1.: (array_values(), ağırlık array_filter()/!is_null())

var_export(array_values(array_filter($array,function($v){return !is_null($v);}))); // good 

Yöntem 2: (foreach(), otomatik dizinli bir dizi, !==null)

foreach($array as $v){ 
    if($v!==null){$result[]=$v;} 
} 
var_export($result); // good 

Yöntem # 3: (array_walk(), otomatik dizin dizisi, !is_null())

array (
    0 => 'foo', 
    1 => 'bar', 
    2 => 0, 
    3 => false, 
    4 => '0', 
    5 => '', 
) 
:
array_walk($array,function($v)use(&$filtered){if(!is_null($v)){$filtered[]=$v;}}); 
var_export($filtered); // good 

Her üç yöntemler aşağıdaki "boş-boş" çıktı sağlar