note 73474 added to function.strstr

From: Date: Sat, 24 Feb 2007 20:48:33 +0000
Subject: note 73474 added to function.strstr
Groups: php.notes 
Request: Send a blank email to php-notes+get-123838@lists.php.net to get a copy of this message
Often you will need to find all occurrences of a string (for security escapes and such) So I wrote this function to return an array with the locations of all the occurrences. Almost like an advanced strstr. function findall($needle, $haystack) { //Setting up $buffer=''; //We will use a 'frameshift' buffer for this search $pos=0; //Pointer $end = strlen($haystack); //The end of the string $getchar=''; //The next character in the string $needlelen=strlen($needle); //The length of the needle to find (speeds up searching) $found = array(); //The array we will store results in while($pos<$end)//Scan file { $getchar = substr($haystack,$pos,1); //Grab next character from pointer if($getchar!="\n" || buffer<$needlelen) //If we fetched a line break, or the buffer is still smaller than the needle, ignore and grab next character { $buffer = $buffer . $getchar; //Build frameshift buffer if(strlen($buffer)>$needlelen) //If the buffer is longer than the needle { $buffer = substr($buffer,-$needlelen);//Truncunate backwards to needle length (backwards so that the frame 'moves') } if($buffer==$needle) //If the buffer matches the needle { $found[]=$pos-$needlelen+1; //Add the location of the needle to the array. Adding one fixes the offset. } } $pos++; //Increment the pointer } if(array_key_exists(0,$found)) //Check for an empty array { return $found; //Return the array of located positions } else { return false; //Or if no instances were found return false } } Haven't had the chance to speed test it, but many optimizations should be possible. It just works enough for me. Hope it saves someone a lot of time. ---- Server IP: 64.71.164.2 Probable Submitter: 24.4.138.230 ---- Manual Page -- http://www.php.net/manual/en/function.strstr.php Edit -- https://master.php.net/note/edit/73474 Del: integrated -- https://master.php.net/note/delete/73474/integrated Del: useless -- https://master.php.net/note/delete/73474/useless Del: bad code -- https://master.php.net/note/delete/73474/bad+code Del: spam -- https://master.php.net/note/delete/73474/spam Del: non-english -- https://master.php.net/note/delete/73474/non-english Del: in docs -- https://master.php.net/note/delete/73474/in+docs Del: other reasons-- https://master.php.net/note/delete/73474 Reject -- https://master.php.net/note/reject/73474 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#123838) next »