php只从数组中获取第一个单词

时间:2009-11-25 22:10:05

标签: php regex dynamic-data strstr

我从数据库中提取了一系列标签,我将标签导出到标签云中。我只是坚持只得到这个词的第一个例子。例如:

$string = "test,test,tag,tag2,tag3";

$getTags = explode("," , $string);
  foreach ($getTags as $tag ){
     echo($tag);
   }

这会输出两次测试标签。起初我以为我可以使用stristr做类似的事情:

  foreach ($getTags as $tag ){
      $tag= stristr($tag , $tag); 
        echo($tag);
   }

这显然是愚蠢的逻辑并且不起作用,stristr似乎只能取代第一次出现,所以像“test 123”这样的东西只能摆脱“测试”并且会返回“123”I'已经看到这也可以用正则表达式完成,但我没有找到一个动态的例子。

谢谢,
布鲁克

编辑: unique_array()如果我使用的是静态字符串,但无法使用数据库中的数据,因为我正在使用while循环来获取每行数据。

    $getTag_data = mysql_query("SELECT tags FROM `news_data`");
if ($getTag_data)
{

   while ($rowTags = mysql_fetch_assoc($getTag_data))
   {
     $getTags = array_unique(explode("," , $rowTags['tags']));
        foreach ($getTags as $tag ){
        echo ($tag);
      }
   }
}

5 个答案:

答案 0 :(得分:4)

使用array_unique()

$string = "test,test,tag,tag2,tag3";

$getTags = array_unique(explode("," , $string));
foreach ($getTags as $tag ){
   echo($tag);
}

答案 1 :(得分:2)

将您的单词用作词典的键,而不是值。

$allWords=array()
foreach(explode("," , $string) as $word)
  $allWords[$word]=true;
//now you can extract these keys to a regular array if you want to
$allWords=array_keys($allWords);

当你在这里时,你也可以数数吧!

$wordCounters=array()
foreach(explode("," , $string) as $word)
{
  if (array_key_exists($word,$wordCounters))
     $wordCounters[$word]++;
  else
     $wordCounters=1;
}

//word list:
$wordList=array_keys($wordCounters);

//counter for some word:
echo $wordCounters['test'];

答案 2 :(得分:1)

我假设你表中的每一行都包含多个标记,用逗号分隔,如下所示:

Row0: php, regex, stackoverflow
Row1: php, variables, scope
Row2: c#, regex

如果是这种情况,请尝试:

$getTag_data = mysql_query("SELECT tags FROM `news_data`");

//fetch all the tags you found and place it into an array (with duplicated entries)
$getTags = array();
if ($getTag_data) {
   while ($row = mysql_fetch_assoc($getTag_data)) {
     array_merge($getTags, explode("," , $row['tags']);
   }
}

//clean up duplicity
$getTags = array_unique($getTags);

//display
foreach ($getTags as $tag ) {
   echo ($tag);
}

我指出这不高效。

另一个选项(此处已经提到)将使用标签作为数组键,其优点是可以轻松计算它们。
你可以这样做:

$getTag_data = mysql_query("SELECT tags FROM `news_data`");

$getTags = array();
if ($getTag_data) {
   while ($row = mysql_fetch_assoc($getTag_data)) {
     $tags = explode("," , $row['tags']);
     foreach($tags as $t) {
       $getTags[$t] = isset($getTags[$t]) ? $getTags[$t]+1 : 1;
     }
   }
}

//display
foreach ($getTags as $tag => $count) {
   echo "$tag ($count times)";
}
  • 请记住,这些代码都没有经过测试,只是让你明白了。

答案 3 :(得分:0)

我相信php的array_unique就是你要找的东西:

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

答案 4 :(得分:0)

在迭代数组之前使用array_unique函数?它删除每个重复的字符串并返回唯一的函数。