2017-10-16 168 views
0

您好我有一个包含具有以下结构两个数组的数组:在PHP中删除从关联数组键的特定记录

categories [ 
    "lvl0" => array:2 [ 
    0 => "Cleaning" 
    1 => "Bread" 
    ] 
    "lvl1" => array:2 [ 
    0 => null 
    1 => "Bread > rolls" 
    ] 
] 

我想从“LVL1”数组中删除NULL的任何记录,但一直未能找到正确的方法来做到这一点。

我曾尝试:

array_filter($categories['lvl1']) 

但是,这也将删除相关联LVL1,而不仅仅是那些空的所有记录。

任何帮助将不胜感激。

由于

+1

'array_combine(array_keys($类别),array_map( 'array_filter',$类别))'' – apokryfos

+0

$类别[ 'LVL1'] = array_filter($类别[ 'LVL1'])'? –

+2

你可以添加更多的代码来显示你使用'array_filter($ categories ['lvl1'])''的上下文吗? _不应删除任何非空值。_ –

回答

0

罗比Averill的谁与我的帖子评论下面解决了这个问题:

$categories['lvl1'] = array_filter($categories['lvl1']); 
0

array_filter()采用了回调作为第二个参数。如果您不提供它,它将仅返回不等于布尔值false的记录。您可以提供一个简单的回调来删除空值。

array_filter()也使用数组的副本(而不是引用),因此您需要使用返回值。

例如:

$categories = [ 
    "lvl0" => [ 
    "Cleaning", 
    "Bread" 
    ], 
    "lvl1" => [ 
    null, 
    "Bread > rolls" 
    ] 
]; 

$lvl1 = array_filter($categories['lvl1'], function($value) { 
    return !empty($value); 
}); 

var_dump($lvl1); 

,将返回:

array(1) { 
    [1] => 
    string(13) "Bread > rolls" 
} 
+0

在回调中使用'return!empty($ value);'实际上具有与不使用回调相同的效果。 –

+0

从技术上讲,当然。但它也没有什么启发意义,因为它没有告诉他如何改变回调。 –

0

我有我的最后一个工作day.Generally关联数组相同的问题array_filter()需要数组键过滤掉nullfalse等值。但是这个小函数帮助我在不知道关联数组键的情况下过滤出NULL值。希望这也将帮助你,https://eval.in/881229

代码:

function array_filter_recursive($input) 
    { 
    foreach ($input as &$value) 
    { 
     if (is_array($value)) 
     { 
     $value = array_filter_recursive($value); 
     } 
    } 

    return array_filter($input); 
    } 

$categories = [ 
    "lvl0" => [ 
    "Cleaning", 
    "Bread" 
    ], 
    "lvl1" => [ 
    null, 
    "Bread > rolls" 
    ] 
]; 

$result = array_filter_recursive($categories); 
print '<pre>'; 
print_r($result); 
print '</pre>'; 

输出:

(
    [lvl0] => Array 
     (
      [0] => Cleaning 
      [1] => Bread 
     ) 

    [lvl1] => Array 
     (
      [1] => Bread > rolls 
     ) 

) 

编号:http://php.net/manual/en/function.array-filter.php#87581