【问题标题】:Delete array item for empty keys删除空键的数组项
【发布时间】:2018-03-01 07:10:58
【问题描述】:

我有这个数组

[4] => Array
    (
        [label] => Politics
        [value] => politics
    )

[5] => Array
    (
        [label] => 
        [value] => 
    )

[6] => Array
    (
        [label] => Sports
        [value] => sports
    )

我想删除这个块

[5] => Array
    (
        [label] => 
        [value] => 
    )

所以,我想删除空数组键或值的过程。

谢谢。

【问题讨论】:

标签: php arrays


【解决方案1】:

如果您想删除所有具有 null、空或 false 值的子数组,您可以使用 array_filter 和可调用的 array_filter

$data = 
[
    [
        'foo' => null,
        'bar' => 'big'    
    ],
    [
    ],
    [
        'baz' => 'fat',
        'bat' => 'mama'
    ],
    [
        'man' => '',
        'qux' => null,
        'quux' => false
    ]
];

$data = array_filter($data, 'array_filter');

var_export($data);

输出:

array (
  0 => 
  array (
    'foo' => NULL,
    'bar' => 'big',
  ),
  2 => 
  array (
    'baz' => 'fat',
    'bat' => 'mama',
  ),
)

使用不带回调的 array_filter 将丢弃等于 FALSE 的元素。 ((bool) array() 是假的。)

【讨论】:

    【解决方案2】:

    试试这样''过滤器,

    $new = array_filter($entry, function ($var) {
        return ($var['label'] !== '' || $var['value'] !== '' );
    });
    
    print '<pre>';
    print_r($new);
    print '</pre>';
    

    编辑:null过滤器

    $new = array_filter($entry, function ($var) {
        return ($var['label'] !== null || $var['value'] !== null );
    });
    
    print '<pre>';
    print_r($new);
    print '</pre>';
    

    【讨论】:

    • 问题依旧。
    【解决方案3】:

    我建议做类似下面的伪代码

    foreach (array_keys as key) {
    
       if  (empty(array[key][label])==true)
          unset(array[key]);
    }
    

    【讨论】:

      【解决方案4】:

      你可以使用内置的array_filter()函数。

      对于这个数组结构:

      $arr = [
          [
              'label' => 'Politics',
              'value' => 'politics'
          ],
          [
              'label' =>'',
              'value' => ''
          ],
          [
              'label' => 'Sports',
              'value' => 'sports'
          ],
      ];
      

      此代码将删除任何没有标签或值的元素:

      $arr = array_filter($arr, function ($e) {
         return ($e['label'] || $e['value']);
      });
      

      【讨论】:

        【解决方案5】:
        $array = array(array('label' => "" ,'value' => ''),array('label' => 'test','value' => 'tset2'));
            foreach($array as $key => $val)
            {
                if(empty($val['label']) ||  empty($val['value']) )
                {
                    unset($array[$key]);
                }
            }
            echo "<pre>";
            print_r($array) ;
            echo "</pre>";
        

        我认为这段代码会对你有所帮助

        【讨论】:

        • 非常感谢,这太棒了。
        • 对于大数组,最好使用内置函数而不是使用 foreach 进行迭代,因为它们的工作速度要快得多。
        【解决方案6】:
        array_filter($your_table);  
        

        http://php.net/manual/pl/function.array-filter.php

        当我遇到与数组中的空值相同的问题时,我使用了这个

        【讨论】:

          【解决方案7】:

          也许您可以对要删除的元素进行切片。请参考链接:Delete an element from an array

          【讨论】:

          • 但是,空数组是可变的。不确定。
          猜你喜欢
          • 2020-06-03
          • 2015-12-24
          • 1970-01-01
          • 2020-10-19
          • 2012-05-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-13
          • 1970-01-01
          相关资源
          最近更新 更多