2013-05-14 11 views
6

में खाली सरणी तार हटाने मैं इस सरणी है:पीएचपी: बहुआयामी सरणी

$aryMain = array(array('hello','bye'), array('',''),array('','')); 

यह के अंत में एक csv फ़ाइल और सरणी पढ़ने ('', '') कर रहे हैं खाली पंक्तियों द्वारा बनाई है फ़ाइल।

मैं उन्हें कैसे हटा सकता हूं?

मैं कोशिश की है:

$aryMain = array_filter($aryMain); 

लेकिन यह काम नहीं कर रहा :(

धन्यवाद एक बहुत

+2

क्यों बस में उन लोगों के खाली लाइनों को छोड़ नहीं बचा जाना चाहिए प्रथम स्थान? –

उत्तर

17

रिकेश के जवाब में जोड़ने के लिए रखने के लिए:

<?php 
$aryMain = array(array('hello','bye'), array('',''),array('','')); 
$aryMain = array_filter(array_map('array_filter', $aryMain)); 
print_r($aryMain); 

?> 

एक और array_filter में अपने कोड चिपका पूरे सरणियों खुद को से छुटकारा मिल जाएगा।

Array 
(
    [0] => Array 
     (
      [0] => hello 
      [1] => bye 
     ) 

) 

की तुलना में:

$aryMain = array_map('array_filter', $aryMain); 

Array 
(
    [0] => Array 
     (
      [0] => hello 
      [1] => bye 
     ) 

    [1] => Array 
     (
     ) 

    [2] => Array 
     (
     ) 

) 
+0

@MiguelMas ध्यान रखें कि '0''' जैसे तारों को भी इस तरह से हटा दिया जाएगा। –

9

उपयोग array_map array_filter के साथ साथ,

$array = array_filter(array_map('array_filter', $array)); 

या बस! array_filter_recursive फ़ंक्शन

बनाएं
function array_filter_recursive($input) 
{ 
    foreach ($input as &$value) 
    { 
     if (is_array($value)) 
     { 
     $value = array_filter_recursive($value); 
     } 
    }  
    return array_filter($input); 
} 

DEMO.

नोट: है कि इस जिसमें '0' आइटम हट जाएंगे (अर्थात संख्या शून्य के साथ स्ट्रिंग)। कुछ देर प्रतीक्षा पैरामीटर के रूप में 'strlen' पारित 0

+1

स्ट्रेल टिप के कारण उपरोक्त! – MarkokraM

2

एक बार फिर मुख्य सरणी पर array_filter() लागू करें और उसके बाद आंतरिक तत्वों पर:

$aryMain = array_filter($aryMain, function($item) { 
    return array_filter($item, 'strlen'); 
}); 

भीतरी array_filter() विशेष रूप से strlen() का उपयोग करता तत्व है कि क्या यह निर्धारित करने के खाली है; अन्यथा यह '0' को भी हटा देगा।

एक सरणी के खालीपन आप भी array_reduce() इस्तेमाल कर सकते हैं निर्धारित करने के लिए:

array_filter($aryMain, function($item) { 
    return array_reduce($item, function(&$res, $item) { 
     return $res + strlen($item); 
    }, 0); 
}); 

चाहे कि और अधिक कुशल विवादास्पद है, लेकिन यह कुछ स्मृति :)

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