如何在PHP中删除包含在关联数组中的数组内的所有空值?

How to remove all null values inside an array, which is enclosed within an associate array, in PHP?

我的问题可能看起来很简单,但我尝试了多种技术,none 似乎得出了正确的答案。

我有一个关联数组如下:

$array = array("TB1_course" => array(null, 'CHEM 2E03', null, "BIO 1A03"),  
          "TB1_section" => array(null, 'CHEM 2E03', null, "BIO 1A03"), 
          "TB1_session" => array(null, 'CHEM 2E03', null, "BIO 1A03")
          );

现在我想为相应的关联数组删除数组中的所有空元素。

我的尝试如下:

foreach($array as $key=>$value){
    for($i=0; $i<sizeof($value);$i++){
        if ($value[$i]==null){
           unset($value[$i]); 
        }
        $array[$key]=$value;
    }
}

print_r($array);

但我的输出也重新排列了数组的索引。我的输出如下:

Array
(
[TB1_course] => Array
    (
        [1] => CHEM 2E03
        [3] => BIO 1A03
    )

[TB1_section] => Array
    (
        [1] => CHEM 2E03
        [3] => BIO 1A03
    )

[TB1_session] => Array
    (
        [1] => CHEM 2E03
        [3] => BIO 1A03
    )

)

我想删除索引,以便我的数组中只有两个元素。 "CHEM 2E03" 应该是第 0 个索引,"BIO 1A03" 应该是第一个索引。我正在使用 PHP 5.4.

array_values()函数保留值并重置数组的索引。以下是针对您的目的的实现:

foreach($array as $key=>$value){
  for($i=0; $i<sizeof($value);$i++){
    if ($value[$i]==null){
       unset($value[$i]); 
    }
    $array[$key] = array_values($value);
  }
}

您可以使用 array_values() 函数重新索引您的数组。

使用 unset() 删除值但保持键不变。 这里最好的解决方案是使用 array_splice() ,这将完全删除该元素。 对于您的代码,它应该是

array_splice($value, $i, 1);

而不是

unset($value[$i]); 

您可以使用 function 然后这将使用 array_filter and array_values

递归过滤和重置您的索引
function array_filter_recursive($input) 
{ 
    foreach ($input as &$value) 
    { 
        if (is_array($value)) 
        { 
            $value = array_filter_recursive($value); 
        } 
    } 
    return array_values(array_filter($input)); 
} 

$array = [
    "TB1_course" => array(null, 'CHEM 2E03', null, "BIO 1A03"),  
    "TB1_section" => array(null, 'CHEM 2E03', null, "BIO 1A03"), 
    "TB1_session" => array(null, 'CHEM 2E03', null, "BIO 1A03")
];

print_r(array_filter_recursive($array));

这是 运行 上面的 phpfiddle:http://phpfiddle.org/main/code/cgbj-h10z

资源
1. http://php.net/manual/en/function.array-filter.php
2. http://php.net/manual/en/function.array-values.php

尝试

foreach($array as $key=>$value){
    for($i=0; $i<sizeof($value);$i++){
        if ($value[$i]==null){
           unset($value[$i]); 
        }
        $array[$key]=$value;
    }
}

$arr = array_map('array_values', $array);
print_r($arr);