php فقط الحصول على التواجد الأول من كلمة من مجموعة

StackOverflow https://stackoverflow.com/questions/1800282

سؤال

لدي مجموعة من العلامات التي أنا سحب من قاعدة بيانات ، أنا وتصدير العلامات في سحابة الكلمة الدلالية.أنا علقت فقط على الحصول على الدرجة الأولى من الكلمة.على سبيل المثال:

$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 ويبدو أن استبدال فقط أول حدوث شيء مثل "اختبار 123" فقط التخلص من "اختبار" و سيعود "123" لقد رأيت هذا يمكن أيضا أن يتم ذلك مع regex ولكن لم أجد ديناميكية حصول exmaple من ذلك.

شكرا
بروك

تحرير: unique_array() يعمل إذا أنا باستخدام ثابت سلسلة ولكن لن تعمل مع البيانات من قاعدة البيانات لأن أنا باستخدام حلقة في حين أن الحصول على كل الصفوف البيانات.

    $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);
      }
   }
}
هل كانت مفيدة؟

المحلول

أنا على افتراض أن كل صف في الجدول الخاص بك يحتوي على أكثر من علامة واحدة ، مفصولة غيبوبة, مثل هذا:

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)";
}
  • يرجى أن نضع في اعتبارنا لا شيء من هذا كان رمز اختبار, انها فقط حتى تحصل على هذه الفكرة.

نصائح أخرى

استخدام array_unique()

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

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

استخدام الكلمات المفاتيح إلى القاموس ، وليس القيم.

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

أعتقد php array_unique هو ما كنت أبحث عنه:

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

استخدام array_unique وظيفة قبل بالتكرار على المصفوفة ؟ فهو يزيل كل تكرار سلسلة والعودة وظائف فريدة من نوعها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top