首页 > 解决方案 > 无法从多维数组中删除空键

问题描述

我正在尝试使用 array_filter 函数从数组中删除数组元素。它工作正常,但总是有一个元素没有被删除。

数组由array_combine 构造,使用一个简单数组,另一个由array_chunk 构建。

这是我的代码:

$arr_a = array("AAA","","CCC","");

$arr_b = array("a1","b1","a2","b2","a3","b3","a4","b4");

$arr_c = array_chunk($arr_b,2);

$c = array_combine($arr_a,$arr_c);

$limpn_url = array_filter($c);

如果我得到一个错误,我不会费心在这里发布一个问题。但是没有错误返回。

制作时print_r($limpn_url); 的输出是: Array ( [AAA] => Array ( [0] => a1 [1] => b1 ) [] => Array ( [0] => a4 [1] => b4 ) [CCC] => Array ( [0] => a3 [1] => b3 ) )

*注意[] => Array ( [0] => a4 [1] => b4 ) 那不应该在那里。其他空元素被正确删除...

标签: phparrays

解决方案


您可以使用一些数组函数来删除为空的键。

$arr_a = array("AAA","","CCC","");

$arr_b = array("a1","b1","a2","b2","a3","b3","a4","b4");

$arr_c = array_chunk($arr_b,2);

$c = array_combine($arr_a,$arr_c);

$limp= array_filter($c);

$filteredkeys = array_filter(array_keys($limp)); // here i remove the "" key

$filtered = array_intersect_key($limp, array_flip($filteredkeys)); // since $filterdkeys is values i need to flip it and intersect with $limp
var_dump($filtered);

输出:

array(2) {
  ["AAA"]=>
  array(2) {
    [0]=>
    string(2) "a1"
    [1]=>
    string(2) "b1"
  }
  ["CCC"]=>
  array(2) {
    [0]=>
    string(2) "a3"
    [1]=>
    string(2) "b3"
  }
}

https://3v4l.org/miNeW


推荐阅读