如何删除空关联数组条目

And*_*Gee 5 php associative-array multidimensional-array

我有一个关联数组: $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
        )
)
Run Code Online (Sandbox Code Playgroud)

如何删除所有完全空的条目,例如$csv_arr[2]保留部分条目,例如$csv_arr[1]

我试过$csv_arr = array_filter(array_map('array_filter', $csv_arr));但是这会删除空元素:$csv_arr[1]['Enfapro']

谢谢

Joh*_* V. 7

试试这个,有点奇怪,但是:

array_filter($csv_arr, function($v){return array_filter($v) == array();});
Run Code Online (Sandbox Code Playgroud)

完全未经测试,我不记得这是否是正确的语法或闭关,但它可以工作.

编辑(测试和工作):

<?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));
?>
Run Code Online (Sandbox Code Playgroud)


Sep*_*ity 5

在你的情况下,它可能更容易。我最近有同样的问题。只需使用

$csv_arr = array_filter($csv_arr, 'array_filter');
Run Code Online (Sandbox Code Playgroud)

array_filter()从数组中移除bool 转换为 false 的元素。这包括 - 例如 - 每个[], null, '', 0, false.

它能做什么

  1. 第一个array_filter()获取每个子数组并将其扔到第二个中array_filter()
  2. 第二个array_filter()删除每个false元素并返回其余元素。重要的是要注意,如果每个元素都转换为 ,则返回的数组将变为空false
  3. 第一个array_filter()从第二个获取结果并检查false. 因此,如果返回空数组,子数组将从数组中删除。

为了证明这个案例,我以约翰五世为例,并使用了array_filter()一行:

<?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'
        )
);
print_r(array_filter($csv_arr, 'array_filter'));
Run Code Online (Sandbox Code Playgroud)