【问题标题】:array matching and display in php数组匹配并在php中显示
【发布时间】:2011-07-10 21:33:33
【问题描述】:

我正在使用 PHP 脚本来实现这个...

    $keyword=array('local news','art','local','world','tech','entertainment','news','tech','top stories','in the news','front page','bbc news','week in a glance','week in pictures','top stories');

   //$keyword has predefined array of strings

    $all_meta_tags=get_meta_tags("http://abcnews.go.com/"); 
    $array=$all_meta_tags['keywords'];//store 'keyword' attribute values in $keyword_meta

现在我必须将 $array 的内容与 $keyword 匹配.....结果应该给我匹配的 $array 项目,这些项目存在于 $keyword 中

任何帮助请...?

数组匹配/交集可以不区分大小写吗? 我的意思是如果 $keyword=array('本地新闻'); $array = '本地新闻,国际新闻'; var_dump(array_intersect(preg_split('/,\s*/', $array), $keyword));

那么它不会匹配“本地新闻”...如果可能的话,你能告诉我如何去做吗??

【问题讨论】:

    标签: php arrays pattern-matching matching


    【解决方案1】:
    $inBoth = array_intersect(preg_split('/,\s*/', $array), $keyword);
    

    CodePad.

    get_meta_tags() 只是将关键字作为字符串返回,因此我们需要将其拆分为一个数组。我们会考虑在, 之后添加空格、换行符或制表符的人。

    您也可以跳过正则表达式,在, 上展开,然后使用array_map('trim', $array)

    如果不这样做,您将面临"art"" art" 不匹配的风险。

    更新

    数组匹配可以不区分大小写吗?

    如果您不介意生成的数组是小写的,您可以在使用 array_intersect() 之前在两个数组上使用 array_map('strtolower', $array)

    要不然这样就行了……

    $metaKeywords = preg_split('/,\s*/', $array);
    $matches = array();
    foreach($keyword as $keyword) {
      foreach($metaKeywords as $value) {
         if (strtolower($value) == strtolower($keyword)) {
            $matches[] = $keyword;
         }
      }
    }
    

    $matches 在两个数组中都有关键字,不区分大小写。

    如果您有多字节字符串,请使用mb_strtolower() 或等效项。

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        • 2021-01-09
        • 1970-01-01
        相关资源
        最近更新 更多