сопоставление массива и отображение в php - PullRequest
1 голос
/ 08 марта 2011

Я использую 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 с ключевым словом $ ..... результаты должны дать мне соответствующие элементы $ arrayкоторые присутствуют в $ keyword

любая помощь, плз ...?

Может ли сопоставление / пересечение массивов выполняться без учета регистра ??Я имею в виду, если $ ключевое слово = массив («местные новости»);$ array = 'Местные новости, международные новости';var_dump (array_intersect (preg_split ('/, \ s * /', $ array), $ ключевое слово));

тогда он не будет совпадать с 'Local News' ... можете ли вы сказать мне, что делатьэто если возможно ??

Ответы [ 2 ]

2 голосов
/ 08 марта 2011
$inBoth = array_intersect(preg_split('/,\s*/', $array), $keyword);

CodePad .

get_meta_tags() просто возвращает ключевые слова в виде строки, поэтому нам нужно разделить их на массив. Мы учитываем людей, добавляющих пробелы, новые строки или табуляции после ,.

Вы также можете пропустить регулярное выражение и взорваться на ,, а затем использовать array_map('trim', $array).

Без этого вы рискуете "art" и " art" не соответствовать.

Обновление

можно ли сопоставлять массивы без учета регистра?

Если вы не возражаете, что получившиеся массивы будут в нижнем регистре, вы можете использовать array_map('strtolower', $array) на обоих массивах перед использованием array_intersect().

В противном случае, это будет сделано ...

$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 голосов
/ 08 марта 2011

Вам нужно использовать array_intersect()

http://php.net/manual/en/function.array-intersect.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...