php 保留只包含字母和连字符的数组元素

omjgkv6w  于 2023-09-29  发布在  PHP
关注(0)|答案(5)|浏览(94)

我有以下数组:

Array
(
    [0] => text
    [1] => texture
    [2] => beans
    [3] => 
)

我想摆脱不包含a-z或a-z与破折号的条目。在本例中,数组项3(仅包含空格)。
我该怎么做?

klsxnrf1

klsxnrf11#

尝试使用:

$input = array( /* your data */ );

function azFilter($var){
    return preg_match('/^[a-z-]+$/i', $var);
}
$output = array_filter($input, 'azFilter');

在PHP 5.3中,也可以简化它:

$input = array( /* your data */ );

$output = array_filter($input, function($var){
    return preg_match('/^[a-z-]+$/i', $var);
});
n3h0vuf2

n3h0vuf22#

试试看:

<?php
    $arr = array(
        'abc',
        'testing-string',
        'testing another',
        'sdas 213',
        '2323'
    );

    $tmpArr = array();
    foreach($arr as $str){
        if(preg_match("/^([-a-z])+$/i", $str)){
            $tmpArr[] = $str;
        }
    }
    $arr = $tmpArr;
?>

输出量:

array
  0 => string 'abc' (length=3)
  1 => string 'testing-string' (length=14)
xzabzqsa

xzabzqsa3#

对于您在问题中提供的数据,请使用带有空回调参数的array_filter()函数。这将过滤掉所有空元素。

$array = array( ... );
$array = array_filter($array);

如果你需要过滤你在问题文本中描述的元素,那么你需要添加一个回调函数,根据你的需要返回true(有效)或false(无效)。您可能会发现ctype_alpha函数对此很有用。

$array = array( ... );
$array = array_filter($array, 'ctype_alpha');

如果你也需要允许破折号,你需要提供一个自己的函数作为回调函数:

$array = array( ... );
$array = array_filter($array, function($test) {return preg_match('(^[a-zA-Z-]+$)', $test);});

这个示例回调函数使用正则表达式来使用preg_match()函数。正则表达式可以用公式表示一组特定的字符,比如a-zA-Z和破折号-(减号)。

8qgya5xd

8qgya5xd4#

好吧,你可以简单地循环通过数组。创建一个正则表达式来测试它是否符合你的条件。如果失败,使用unset()来移除所选元素。

q3aa0525

q3aa05255#

preg_grep()是PHP使用正则表达式和array_filter()功能的解决方案。
该模式匹配由一个或多个字母(不区分大小写)或连字符组成的整个字符串。
代码:(Demo

var_export(
    preg_grep('/^[a-z-]+$/i', $array)
);

这种方法将保留原始数组键,因此如果您想要一个索引数组,请使用array_values(preg_grep('/^[a-z-]+$/i', $array))

相关问题