按前缀过滤数组 - 该函数的名称是啥?

Posted

技术标签:

【中文标题】按前缀过滤数组 - 该函数的名称是啥?【英文标题】:Filter array by prefix - what was that function's name?按前缀过滤数组 - 该函数的名称是什么? 【发布时间】:2011-01-25 05:38:31 【问题描述】:

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

car_porsche
car_mercedes
car_toyota
motorcycle_suzuki
motorcycle_honda
motorcycle_motoguzzi

如何获得所有以car_ 开头的元素的数组?有一个本机功能,但我忘记了它的名字。

你知道我指的是哪个函数吗?我知道如何使用 for/foreach/array_filter 来做到这一点。我很确定确实有这个功能。

【问题讨论】:

【参考方案1】:

PHP 8 (2021):

我为此使用str_starts_with

执行区分大小写的检查,指示 haystack 是否以 needle 开头。

→ Documentation

str_starts_with("car_porsche", "car_");

【讨论】:

【参考方案2】:

Regexp 需要更多时间来处理,在这种情况下最好使用 strpos():

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

这也适用于键:

【讨论】:

【参考方案3】:

您可以编写一个简单的例程,让您可以选择在返回的数组中删除前缀:

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;
    

【讨论】:

【参考方案4】:

我认为您可以为此目的使用array_filter()。

【讨论】:

【参考方案5】:

好吧,你可以使用preg_grep()

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

您也可以使用array_filter(),但您必须向其中传递一个测试函数。

【讨论】:

以上是关于按前缀过滤数组 - 该函数的名称是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何按名称和列表过滤vue中的数组

按字段名称在新的 JS 过滤数组中移动 JS 数组行

数组 - Javascript - 使用输入搜索过滤对象数组

Core Data NSPredicate 按数组中的项目过滤项目集

按匹配不同数组的属性过滤字典数组

Django Queryset 按确切字符串过滤数组字段