2013-07-29 62 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