Categories

See More
Popular Forum

MBA (4887) B.Tech (1769) Engineering (1486) Class 12 (1030) Study Abroad (1004) Computer Science and Engineering (988) Business Management Studies (865) BBA (846) Diploma (746) CAT (651) B.Com (648) B.Sc (643) JEE Mains (618) Mechanical Engineering (574) Exam (525) India (462) Career (452) All Time Q&A (439) Mass Communication (427) BCA (417) Science (384) Computers & IT (Non-Engg) (383) Medicine & Health Sciences (381) Hotel Management (373) Civil Engineering (353) MCA (349) Tuteehub Top Questions (348) Distance (340) Colleges in India (334)
See More

PHP find positions of all occurrences of a particular word in a string

Course Queries Syllabus Queries

Max. 2000 characters
Replies

usr_profile.png

User

( 4 months ago )

 

This is slightly different to finding all the positions of a substring inside a string because I want it to work with words which may be followed by a space, comma, semi-colon, colon, fullstop, exclamation mark and other punctuation.

I have the following function to find all the positions of a substring:

function strallpos($haystack,$needle,$offset = 0){ 
    $result = array(); 
    for($i = $offset; $i<strlen($haystack); $i++){ 
        $pos = strpos($haystack,$needle,$i); 
        if($pos !== FALSE){ 
            $offset =  $pos; 
            if($offset >= $i){ 
                $i = $offset; 
                $result[] = $offset; 
            } 
        } 
    } 
    return $result; 
}

Problem is, if I try to find all positions of the substring "us", it will return positions of the occurrence in "prospectus" or "inclusive" etc..

Is there any way to prevent this? Possibly using regular expressions?

Thanks. Stefan

usr_profile.png

User

( 4 months ago )

Just to demonstrate a non regexp alternative

$string = "It behooves us all to offer the prospectus for our inclusive syllabus";
$filterword = 'us';

$filtered = array_filter(
    str_word_count($string,2),
    function($word) use($filterword) {
        return $word == $filterword;
    }
);
var_dump($filtered);

where the keys of $filtered are the offset position

If you want case-insensitive, replace

return $word == $filterword;

with

return strtolower($word) == strtolower($filterword);

what's your interest


forum_ban8_5d8c5fd7cf6f7.gif