php 按前缀筛选数组的本机函数

bttbmeg0  于 2022-12-02  发布在  PHP
关注(0)|答案(6)|浏览(129)

假设我有一个包含以下成员的数组:

car_porsche
car_mercedes
car_toyota
motorcycle_suzuki
motorcycle_honda
motorcycle_motoguzzi

如何得到一个所有元素都以car_开头的数组?有一个本地函数可以实现这个功能,但是我忘记了它的名字。
你知道我指的是哪个函数吗?我知道如何用for/foreach/array_filter来实现它。我很肯定有一个函数就是用来实现这个功能的。

mrzz3bfm

mrzz3bfm1#

您可以使用preg_grep()

$output = preg_grep('!^car_!', $array);

你也可以使用array_filter(),但是你必须向它传递一个测试函数。

col17t5w

col17t5w2#

处理正则表达式要花费更多的时间,在这种情况下最好使用strpos():

foreach($arr AS $key => $val)
if(strpos(" ".$val, "car_") == 1)     
    $cars[$key] = $val;

这也适用于关键点:

tktrz96b

tktrz96b3#

您可以编写一个简单的例程,该例程为您提供了在返回的数组中删除前缀的选项:

function filter_by_key_prefix ( $arr, $prefix, $drop_prefix=false ) {
        $params = array();
        foreach( $arr as $k=>$v ) {
            if ( strpos( $k, $prefix ) === 0 ) {
                if ( $drop_prefix ) {
                    $k = substr( $k, strlen( $prefix ) );
                }
                $params[ $k ] = $v;
            }
        }
        return $params;
    }
p8h8hvxi

p8h8hvxi4#

第八届PHP大会(2021年)
为此,我使用了str_starts_with
执行区分大小写的检查,指示 haystack 是否以 needle 开头。
→ Documentation

str_starts_with("car_porsche", "car_");
6mzjoqzu

6mzjoqzu5#

假设搜索指针是用户提供的值,在正则表达式中使用它之前,应该通过preg_quote()传递它,以确保转义任何具有特殊含义的字符。
使用preg_函数可以提供最深入的工具,如不区分大小写、多字节解析和字边界等(如果需要)。
preg_grep()反转过滤只需要一个函数标志。要用非正则表达式函数反转过滤,只需反转返回值或返回值的比较(取决于使用哪种技术)。
代码(Demo
第一个

mo49yndu

mo49yndu6#

我认为可以使用array_filter()来实现此目的。

相关问题