php فقط الحصول على التواجد الأول من كلمة من مجموعة
-
05-07-2019 - |
سؤال
لدي مجموعة من العلامات التي أنا سحب من قاعدة بيانات ، أنا وتصدير العلامات في سحابة الكلمة الدلالية.أنا علقت فقط على الحصول على الدرجة الأولى من الكلمة.على سبيل المثال:
$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 هو ما كنت أبحث عنه:
استخدام array_unique وظيفة قبل بالتكرار على المصفوفة ؟ فهو يزيل كل تكرار سلسلة والعودة وظائف فريدة من نوعها.