从php中的关联数组键中删除特定记录

时间:2017-10-16 21:10:32

标签: php arrays null associations

您好我有一个包含两个阵列的数组,它们具有以下结构:

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

我想从'lvl1'数组中删除NULL的任何记录,但是无法找到正确的方法来执行此操作。

我试过了:

array_filter($categories['lvl1'])

但是这也删除了与lvl1相关的所有记录,而不仅仅是NULL。

非常感谢任何帮助。

由于

3 个答案:

答案 0 :(得分: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"
}

答案 1 :(得分:0)

我在上一个工作日遇到了同样的问题。一般来说,关联数组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

答案 2 :(得分:0)

罗比·阿维尔(Robbie Averill)用以下内容评论我的帖子解决了这个问题:

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