假设我有一个包含以下成员的数组:
car_porsche car_mercedes car_toyota motorcycle_suzuki motorcycle_honda motorcycle_motoguzzi
如何得到一个所有元素都以car_开头的数组?有一个本地函数可以实现这个功能,但是我忘记了它的名字。你知道我指的是哪个函数吗?我知道如何用for/foreach/array_filter来实现它。我很肯定有一个函数就是用来实现这个功能的。
car_
mrzz3bfm1#
您可以使用preg_grep():
preg_grep()
$output = preg_grep('!^car_!', $array);
你也可以使用array_filter(),但是你必须向它传递一个测试函数。
array_filter()
col17t5w2#
处理正则表达式要花费更多的时间,在这种情况下最好使用strpos():
foreach($arr AS $key => $val) if(strpos(" ".$val, "car_") == 1) $cars[$key] = $val;
这也适用于关键点:
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; }
p8h8hvxi4#
第八届PHP大会(2021年)为此,我使用了str_starts_with。执行区分大小写的检查,指示 haystack 是否以 needle 开头。→ Documentation
str_starts_with
str_starts_with("car_porsche", "car_");
6mzjoqzu5#
假设搜索指针是用户提供的值,在正则表达式中使用它之前,应该通过preg_quote()传递它,以确保转义任何具有特殊含义的字符。使用preg_函数可以提供最深入的工具,如不区分大小写、多字节解析和字边界等(如果需要)。用preg_grep()反转过滤只需要一个函数标志。要用非正则表达式函数反转过滤,只需反转返回值或返回值的比较(取决于使用哪种技术)。代码(Demo)第一个
preg_quote()
preg_
mo49yndu6#
我认为可以使用array_filter()来实现此目的。
6条答案
按热度按时间mrzz3bfm1#
您可以使用
preg_grep()
:你也可以使用
array_filter()
,但是你必须向它传递一个测试函数。col17t5w2#
处理正则表达式要花费更多的时间,在这种情况下最好使用strpos():
这也适用于关键点:
tktrz96b3#
您可以编写一个简单的例程,该例程为您提供了在返回的数组中删除前缀的选项:
p8h8hvxi4#
第八届PHP大会(2021年)
为此,我使用了
str_starts_with
。执行区分大小写的检查,指示 haystack 是否以 needle 开头。
→ Documentation
6mzjoqzu5#
假设搜索指针是用户提供的值,在正则表达式中使用它之前,应该通过
preg_quote()
传递它,以确保转义任何具有特殊含义的字符。使用
preg_
函数可以提供最深入的工具,如不区分大小写、多字节解析和字边界等(如果需要)。用
preg_grep()
反转过滤只需要一个函数标志。要用非正则表达式函数反转过滤,只需反转返回值或返回值的比较(取决于使用哪种技术)。代码(Demo)
第一个
mo49yndu6#
我认为可以使用array_filter()来实现此目的。