过滤并重新索引二维数组的所有行

问题描述 投票:0回答:2

这是原始数组:

[radios1] => Array
    (
        [0] => on
    )

[from] => Array
    (
        [0] => 
        [1] => Bangalore
        [2] => 
        [3] => 
    )

我想删除每行的空元素,所以我使用此代码来执行此操作:

$array = array_map('array_filter', $_POST);
$array = array_filter($array);

其输出如下

[radios1] => Array
    (
        [0] => on
    )

[from] => Array
    (
        [1] => Bangalore
    )

在这里,我已经能够删除具有空值的键,但过滤后的键应该重新索引。

array_merge()
array_values()
我都用过,但是没有用。我得到相同的输出;我想要的输出为:

[radios1] => Array
    (
        [0] => on
    )

[from] => Array
    (
        [0] => Bangalore
    )
php arrays multidimensional-array filtering reindex
2个回答
1
投票

我会使用array_walk,然后使用array_filter,然后使用array_values来重置索引。

例如:

<?php
$array = [
    'radios1' => [
        'on'
    ],
    'from' => [
        '',
        'Bangalore',
        '',
        '',
    ]
];

array_walk($array, function (&$value, $key) {
    $value = array_values(array_filter($value));
});

print_r($array);

https://3v4l.org/Km1i8

结果:

Array
(
    [radios1] => Array
        (
            [0] => on
        )

    [from] => Array
        (
            [0] => Bangalore
        )

)

0
投票

您的编码尝试表明您希望使用

array_filter()
在每个子数组上的默认行为删除所有空的、虚假的、类似零的值,然后重新索引子数组,然后通过调用
array_filter()
删除任何没有子数组的第一级数组再次。

当函数式编程提供简洁的方法时,它会在闭包内部使用迭代函数调用,因此比使用语言结构进行迭代更昂贵。

以下内容提供了相同的功能,无需任何函数调用,并且永远不需要重新索引子数组,因为保留的值在推入结果数组时会被索引。

代码:(演示

$array = [
    'radios1' => [
        'on',
    ],
    'empty' => [
        '',
        false,
    ],
    'from' => [
        '',
        'Bangalore',
        null,
        0,
    ]
];

$result = [];
foreach ($array as $key => $items) {
    foreach ($items as $item) {
        if ($item) {
            $result[$key][] = $item;
        }
    }
}

var_export($result);

输出:

array (
  'radios1' => 
  array (
    0 => 'on',
  ),
  'from' => 
  array (
    0 => 'Bangalore',
  ),
)

对于想要删除空格和空值但保留零(整数或字符串类型)的任何人,请在条件中使用

strlen($item)

© www.soinside.com 2019 - 2024. All rights reserved.