过滤具有字符串的数组值

时间:2018-12-15 00:57:10

标签: php arrays

我知道以前曾问过这类问题,我也看到了这些可行的答案。但是,当搜索字符串和其余数组值之间没有空格时,它将不起作用。这是我的代码-

$example = array ( 'ext_03.jpg', 'int_01_headlight.jpg'); $searchword = 'int_'; $matches = array_filter($example, function($var) use ($searchword) { return preg_match("/\b$searchword\b/i", $var); }); echo array_values($matches)[0];

$example数组中的最后一个值没有空格,并且此代码不起作用。但是,如果我在int_之后放置空格,则可以使用。但是我需要它即使没有空间也要工作(也应该有空间工作)。我该如何实现?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

这是解决方法:

$example = array ( 'ext_03.jpg', 'int_01_headlight.jpg');
$searchword = 'int_';
$matches = array_filter($example, function($var) use ($searchword) { return 
preg_match("/\b$searchword/i", $var); });
var_dump($matches);

删除第二个\ b:模式中的\ b表示单词边界

文档:http://php.net/manual/en/function.preg-match.php

编辑:

更好的方法是使用\ A:字符串的开头

$example = array ( 'ext_03.jpg', 'int_01_headlight.jpg', 'ext_ int_01_headlight.jpg');
$searchword = 'int_';

// Return 2 results (wrong way)
$matches = array_filter($example, function($var) use ($searchword) { return preg_match("/\b$searchword/i", $var); });
var_dump($matches);

// Return 1 result
$matches = array_filter($example, function($var) use ($searchword) { return preg_match("/\A$searchword/i", $var); });
var_dump($matches);

答案 1 :(得分:0)

当您希望使用正则表达式过滤数组时,在preg_match()中调用array_filter()是次优选择。

最合适的电话是preg_grep()

尝试这样的事情:

$example = preg_grep('~\bint_~', $example);

如果逻辑需要,可以在_之后使用字符类扩展模式。

但是,如果您只对第一个比赛([0])感兴趣,那么最好使用foreach()preg_match()运行break

答案 2 :(得分:0)

我喜欢你的解释shim-sao。