按前缀过滤数组 - 该函数的名称是啥?
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()
,但您必须向其中传递一个测试函数。
【讨论】:
以上是关于按前缀过滤数组 - 该函数的名称是啥?的主要内容,如果未能解决你的问题,请参考以下文章
数组 - Javascript - 使用输入搜索过滤对象数组