webForumDet fria alternativet

Funktion som returnerar ord nr x i en sträng?

PHP

5 svar · 244 visningar · startad av muskot

Medlem sedan jan. 20027 905 inlägg
Frågan#1

Finns det någon inbyggd funktion som returnerar det ord som står på en angiven position i en sträng? Har letat och letat och letat utan resultat.

Typ så här alltså:

$text = "jag heter markus";

eftersökt_funktion($text, 2); // returnerar "heter"
Medlem sedan mars 20025 907 inlägg
#2

Re: Funktion som returnerar ord nr x i en sträng?

Ingen inbyggd vad jag vet, men något sådant här borde väl fungera?

function word($str,$nr)
{
$temp = explode(" ",$str);
return $temp[$nr-1];
}

$text = "jag heter markus";
word($text, 2); // returnerar "heter"
Medlem sedan jan. 20027 905 inlägg
#3

Tack Peeer.

Dock hittade jag precis str_word_count som klarade av att göra det jag ville, även om den inte fungerar som jag beskrev det.

$text = "jag heter markus";
$word = str_word_count($text, 1);
echo $word[1]; // returnerar "heter"

(Tycker det är påfallande ofta man hittar grejerna man söker alldeles efter man ställt frågan.)

Medlem sedan aug. 20002 975 inlägg
#4

Jag känner inte hellertill någon sådan funktion (kan finnas ändå :) ), men du skulle kunna göra något liknande detta med str_word_count:

function pos_word($text, $pos) {
   $words = str_word_count($text, 1);
   if ($pos < sizeof($words) && $pos > 0) {
     return $words[$pos-1];
   } else return '';
}

$text = "jag heter markus";

echo "Ord 2 är <b>".pos_word($text, 2)."</b>";
Medlem sedan jan. 20027 905 inlägg
#5

Tack även till Matte.

Men av någon anledning verkar inte ÅÄÖ fungera med str_word_count. Att lägga till följande rad högst upp löste problemen med å och ö, men ä fungerar fortfarande inte:

setlocale (LC_ALL, "swedish");

Förslag?

Medlem sedan aug. 20002 975 inlägg
#6

Testa det här (två varianter):

function pos_word_entities($text, $pos) {
   $text = html_entity_decode($text); // PHP >= version 4.3.0
   $words = preg_split("/[^\\w]+/", $text);
   if ($pos < sizeof($words) && $pos > 0) {
     return htmlentities($words[$pos-1]);
   } else return '';
}

function pos_word($text, $pos) {
   $words = preg_split("/[^\\w]+/", $text);
   if ($pos < sizeof($words) && $pos > 0) {
     return $words[$pos-1];
   } else return '';
}

// Text utan HTML-entiteter
$text = "jag heter Åke Svensson";
echo "Ord 3 är <b>".pos_word($text, 3)."</b><br>";

// Text med HTML-entiteter
$text = "jag heter &Aring;ke Svensson";
echo "Ord 3 är <b>".pos_word_entities($text, 3)."</b>";
258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)