【问题标题】:How to remove all null values inside an array, which is enclosed within an associate array, in PHP?如何在 PHP 中删除包含在关联数组中的数组中的所有空值?
【发布时间】:2018-02-02 16:43:36
【问题描述】:

我的问题可能看起来很简单,但我尝试了多种技术,但似乎都没有一个正确的答案。

我有一个关联数组如下:

$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”应该是第 1 个索引。我正在使用 PHP 5.4。

【问题讨论】:

    标签: php arrays associative-array php-5.4


    【解决方案1】:

    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);
      }
    }
    

    【讨论】:

    • 工作,谢谢!我在 php 7.0 中使用 array_filter 并且不知道如何重置索引。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      array_splice($value, $i, 1);
      

      而不是

      unset($value[$i]); 
      

      【讨论】:

        【解决方案4】:

        您可以使用function,然后这将使用array_filterarray_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

        【讨论】:

          【解决方案5】:

          试试

          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);
          

          【讨论】:

            猜你喜欢
            • 2020-01-01
            • 2010-09-19
            • 1970-01-01
            • 1970-01-01
            • 2014-07-31
            • 1970-01-01
            • 2017-05-19
            • 1970-01-01
            • 2017-06-16
            相关资源
            最近更新 更多