php sadece bir diziden bir kelimenin ilk geçtiği olsun

5 Cevap php

Ben bir veritabanından, bir etiket bulutu içine etiketleri dışında ihracat ediyorum çekiyorum etiketleri bir dizi var. Ben sözcüğün yalnızca ilk örneği alma konusunda şaşırıp. Örneğin:

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

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

Bu iki çıkış testi etiketi olur. ilk başta i stristr gibi bir şey yapmak için kullanabilirsiniz düşündüm:

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

Bu tabii ki saçma mantık ve stristr sadece öylesine bir şey "test 123", sadece "test" kurtulmak istiyorum ve iade ediyorum "123" Ben ettik gibi ilk geçtiği yerde değiştirmek gibi görünüyor, çalışmıyor görülen bu regex ile de yapılabilir ama bu bir dinamik xmaple bulamadı.

Thanks,
Brooke

Statik bir dize kullanıyorum ama her satır veri almak için bir süre döngü kullanıyorum çünkü veritabanından veri ile çalışmak olmaz ise Edit: unique_array() çalışır.

    $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 Cevap

Ben senin tablodaki her satır böyle komaya ayrılmış birden fazla etiketi, içerdiğini varsayarak yaşıyorum:

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

Bu durumda ise, bu deneyin:

$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);
}

Ben bu verimli olmadığını işaret ediyorum.

Another option (already mentioned here) would be to use the tags as array keys, with the advantage of being able to count them easily.
You could do it like this:

$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)";
}
  • Eğer fikir olsun bu yüzden sadece, bu kodun hiçbiri test edilmiştir lütfen unutmayın.

kullanmak array_unique()

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

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

Değil değerler olarak, sözlüğe tuşları gibi kelimeler kullanın.

$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);

Ona iken, bunları da sayabilirsiniz!

$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'];

PHP'nin array_unique arıyorsun ne olduğuna inanıyorum:

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

Dizi yineleme önce array_unique işlevini kullanın? Her yinelenen dize kaldırır ve benzersiz fonksiyonları geri.