首页 > 解决方案 > 从具有特定内容(特殊字符)的数组中删除元素

问题描述

请求您帮助删除空数组元素,我试过了array_filterarray_map('array_filter', $array)但似乎没有按预期工作。下面是数组结构和预期的输出,

原始数组

Array
(
    [0] => [
    [1] =>     [
    [2] =>         [
    [3] =>             "Test",
    [4] =>             "Server1",
    [5] =>             null,
    [6] =>             "Server2",
    [7] =>             null,
    [8] =>             "",
    [9] =>             "stopped",
    [10] =>         ]
    [11] =>     ]
    [12] => ]
)

预期的数组输出

Array
(
    [0] =>             "Test",
    [1] =>             "Server1",
    [2] =>             null,
    [3] =>             "Server2",
    [4] =>             null,
    [5] =>             "",
    [6] =>             "stopped",
)

请注意,不应删除nulland元素。""

标签: phparrays

解决方案


您可以将preg_grep与匹配单个[或的模式一起使用,]并使用标志PREG_GREP_INVERT来获得反向匹配。

正则表达式演示| php演示

^\h*[][]\h*$

在零件

  • ^字符串的开始
  • \h*匹配 0+ 个水平空白字符
  • [][] 字符类,匹配[]
  • \h*匹配 0+ 个水平空白字符
  • $字符串结束

例如

$array = Array
(
    "[",
    "     [",
    "         [",
    "Test",
    "Server1",
    null,
    "Server2",
    null,
    "",
    "stopped",
    "         ]",
    "     ]",
    "]"
);

$res = preg_grep("/^\h*[][]\h*$/", $array, PREG_GREP_INVERT);
var_export($res);

输出

array (
  3 => 'Test',
  4 => 'Server1',
  5 => NULL,
  6 => 'Server2',
  7 => NULL,
  8 => '',
  9 => 'stopped',
)

如果要重置结果数组中的键,可以使用array_values array_values($res)


推荐阅读