2010-04-16 5 views
30

अगर मैं शून्य मानों को खत्म करने के लिए array_filter के साथ एक सरणी फ़िल्टर करता हूं, तो कुंजी संरक्षित होती है और यह सरणी में "छेद" उत्पन्न करती है। उदाहरण के लिए:php array_filter बिना किसी कुंजी संरक्षण

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

मैं कैसे प्राप्त कर सकते हैं, बजाय

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

? धन्यवाद

उत्तर

61

आप मान प्राप्त करने के लिए फ़िल्टरिंग के बाद array_values का उपयोग कर सकते हैं।

0

इस इनपुट का उपयोग करना:

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

कुछ तरीके हैं जिन्हें आप यह कर सकता है कर रहे हैं। Demo

यह थोड़ा विषय से हटकर array_filter के लालची डिफ़ॉल्ट व्यवहार को लाने के लिए है, लेकिन आप इस पेज को googling कर रहे हैं, यह शायद महत्वपूर्ण जानकारी अपनी परियोजना/कार्य से संबंधित है है:

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

बुरा आउटपुट :

:

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

अब तरीके कि काम करेंगे के लिए

विधि # 1: (array_values(), array_filter() डब्ल्यू/!is_null())

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

विधि # 2: (foreach(), ऑटो इंडेक्स किए गए सरणी, !==null)

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

विधि # 3: (array_walk(), ऑटो-इंडेक्स सरणी, !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 

सभी तीन तरीकों का पालन "शून्य से मुक्त" आउटपुट प्रदान करते हैं

संबंधित मुद्दे