如何只获取数组中第一个匹配的值

时间:2012-03-06 17:51:46

标签: php arrays pattern-matching

编辑:我想问一下获得第一场比赛或第一场比赛的最佳/最快方式是什么。

我有一个数组

$arr = ('abc', 'ded', 'kjld', 'abr', 'cdfd');

我想首先shuffle此数组,然后仅检索与模式/ab/匹配的第一个值。因此,返回的值可能是abc或abr。

我看了preg_grep,但它将返回所有匹配的数组。当然,我可以只检索结果数组的第一个值,但这很浪费,需要额外的数组操作步骤。是否有另一个函数或preg_grep开关指定仅返回第一个匹配值(或前5个匹配值)。我查看了preg_matchpreg_search,但他们似乎没有给出我想要的内容。

2 个答案:

答案 0 :(得分:6)

当您使用break找到匹配项时,您可以遍历数组并结束循环:

foreach($arr as $value) {
    if(preg_match($pattern,$value)) {
        $return_string=$value;
        break;
    }
}

指定限制:

$limit=3;
$i=0 // sets the number of returned results to 0
$results=array();
foreach($arr as $value) {
    if(preg_match($pattern,$value)) {
        // add the result into the array and increment the counter
        array_push($results,$value);
        $i++;
    } if ($i=$limit) break;
}

然后,您可以使用另一个foreach循环返回您的值,如:

if(count($results)>0)
foreach ($results as $result) {
    echo $result;
} else echo "No results found";

答案 1 :(得分:3)

我相信运行preg_grep然后获取第一个值就可以了,但是你可以循环你的数组并在找到匹配时返回:

function firstMatch($arr,$pattern) {
    foreach($arr as $item) {
        if(preg_match($pattern,$item)) {
            return $item;
        }
    }
    return 'no match';
}