从数组中删除特定内容(特殊字符)的元素

3

请求您的帮助,删除空数组元素,我尝试了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",
)

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

从你的例子来看,它们是具有1个元素的嵌套数组,因此它们不是空的。也许只需创建一个包含你找到的元素的新数组? - Constantin Trepadus
你的输入数据是如何被转换成数组的? - Nick
1
你能否编辑你的帖子并附上你的代码? - Simone Rossaini
输出数组是通过 PHP exec 对 AWS CLI 命令执行的结果获得的。 - Vino
4个回答

0
您可以使用 preg_match()函数来检查每个元素是否存在[]
preg_match ('/[\[\]]+/', $val, $matches);

如果它有 - 跳过这个值。因此,如果您的输入数组具有以下结构:

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

这个函数将会移除相应的元素:

function cleanArray($ar){ 
    $res = [];
    foreach($ar as $val){ 
        preg_match ('/[\[\]]+/', $val, $matches); 
        if(count($matches) == 0) $res[] = $val;
    }
    return $res;
}

演示


0
您可以使用 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)


-1

对于这种特定格式,您可以使用以下内容:

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

// array_shift needs to receive value by reference, or it throws notice
$shifted_array = array_shift($array); 
$inner_array = array_shift($shifted_array);

echo "<pre>";
   die(var_dump(  $inner_array  ));
echo "</pre>";

// output

array (size=7)
  0 => string 'Test' (length=4)
  1 => string 'Server1' (length=7)
  2 => null
  3 => string 'Server2' (length=7)
  4 => null
  5 => string '' (length=0)
  6 => string 'stopped' (length=7)

-2
array_filter() 函数使用回调函数过滤数组的元素或值。如果没有提供回调函数,则将删除等于 FALSE 的所有数组条目。 print_r(array_filter($array));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接