array_filter()返回一个空数组

时间:2015-10-31 09:44:55

标签: php arrays

我有这个数组:

array 
  0 => string 'http://example.com/site.xml' 
  1 => string 'http://example.com/my_custom_links_part1.xml' 
  2 => string 'http://example.com/my_custom_links_part2.xml' 
  3 => string 'http://example.com/my_custom_links_part3.xml'
  4 => string 'http://example.com/my_some_other_custom_links_part1.xml' 

和此代码获取名称中包含“my_custom_links”的链接(但不是“my_come_other_custom_links”)

 <?php 


        $matches = array_filter($urls, function($var) { return preg_match("/^my_custom_links$/", $var); });

        echo "<pre>";
        print_r($urls); // will output all links
        echo "</pre>";

        echo "<pre>";
        print_r($matches); // will output an empty array
        echo "</pre>";
    ?>

我应该得到一个包含3个项目的数组,但我得到一个空数组。

4 个答案:

答案 0 :(得分:1)

你的正则表达式错了。

preg_match("/^my_custom_links$/"

仅匹配my_custom_links的字符串。将其更改为

preg_match("/my_custom_links/"

答案 1 :(得分:1)

试试这个:

email,contact no

答案 2 :(得分:1)

您的正则表达式不正确,因为它检查^(starts)$(ends)my_custom_links

的字符串
^my_custom_links$

应该只是

\bmy_custom_links

答案 3 :(得分:1)

你的代码很好,唯一不对的是你的正则表达式。 它不起作用的原因是因为你在开头有^这意味着匹配它开头的指定值然后你有$这意味着匹配那个字符串在指定的字符串值的末尾。

改为使用

preg_match("/my_custom_links/" .. rest of the code