2013-07-29 93 views
4

我有一個關聯數組:$csv_arr如何刪除空關聯數組項

Array 
(
    [0] => Array 
     (
      [Enfalac] => alpha linolenic acid 300 mg 
      [Enfapro] => alpha linolenic acid 200 mg 
     ) 

    [1] => Array 
     (
      [Enfalac] => arachidonic acid 170 mg 
      [Enfapro] => 
     ) 

    [2] => Array 
     (
      [Enfalac] => 
      [Enfapro] => 
     ) 

    [3] => Array 
     (
      [Enfalac] => calcium 410 mg 
      [Enfapro] => calcium 550 mg 
     ) 
) 

如何刪除爲$csv_arr[2]所有完全是空的條目,但保留諸如$csv_arr[1]

我試過部分條目$csv_arr = array_filter(array_map('array_filter', $csv_arr));但這移除空元素:$csv_arr[1]['Enfapro']

THX

+1

你嘗試過什麼嗎?像循環?或者array_filter也許? –

+0

如果可能的話,我寧願不使用循環,因爲這是一個非常大的數組,因此內置函數會更可取。我明白這是不可能的,但我活在希望之中。 –

+0

循環遍歷數組,然後再遍歷包含數組的值並檢查值是否爲空,然後取消設置。 – Gacha

回答

6

試試這個,有點怪異,但是:

array_filter($csv_arr, function($v){return array_filter($v) == array();}); 

完全未經測試,我不記得,如果這是正確的語法或不關閉,但它可以工作。

編輯(測試工作):

<?php 
$csv_arr = array(
    0 => array(
      'Enfalac' => 'alpha linolenic acid 300 mg', 
      'Enfapro' => 'alpha linolenic acid 200 mg' 
     ), 

    1 => array(
      'Enfalac' => 'arachidonic acid 170 mg', 
      'Enfapro' => '' 
     ), 

    2 => array(
      'Enfalac' => '', 
      'Enfapro' => '' 
     ), 

    3 => array(

      'Enfalac' => 'calcium 410 mg', 
      'Enfapro' => 'calcium 550 mg' 
     ) 
); 
$c = function($v){ 
    return array_filter($v) != array(); 
}; 
var_dump(array_filter($csv_arr, $c)); 
?> 
+0

我喜歡這個想法,但我的PHP說不,我不知道如何解決它,所以我去了一個內爆變化。 Thx tho –

+0

@AndyGee爲了讓我的例子正確,我將以更友好的格式重新編寫它。 –

+0

@AndyGee試試這個,它可能比你的方法更快,沒有線索。 –

0

好,感謝大家的幫助。我設法在循環中這樣做。

if(implode('',$csv_arr[$i])==''){ 
    unset($csv_arr[$i]); 
} 
0

我覺得這是這個更好的和合適的解決方案,

這裏是代碼:

$arr[0]['id'] = "id1"; 
$arr[0]['name'] = "testing"; 
$arr[1]['id'] = "id2"; 
$arr[1]['name'] = "another"; 
$arr[2]['id'] = ""; 
$arr[2]['name'] = ""; 
$d = array_keys($arr); 
foreach($arr as $key=>$values){ 
    $a = array_keys($values); 
    $n = count($a); 
    for($i=0,$count=0;$i<$n;$i++){ 
     if($values[$a[$i]]==NULL){ 
      $count++; 
     } 
    } 
    if($count==$n){ 

     unset($arr[$key]); 
    } 
} 
echo "<pre>"; 
print_r($arr); 

如果你想這更多的嵌套關聯數組工作,可以實現同樣在遞歸函數中。

謝謝, Nirav