PHP trouve toutes les occurrences d'une sous chaîne dans une chaîne
J'ai besoin d'analyser un document HTML et de trouver toutes les occurrences de string asdf
.
J'ai actuellement le HTML chargé dans une variable de chaîne. Je voudrais juste la position du caractère afin que je puisse parcourir la liste pour renvoyer des données après la chaîne.
La Fonction strpos
renvoie uniquement la première occurrence . Que diriez-vous de retourner Tous d'entre eux?
6 réponses
Sans utiliser regex, quelque chose comme ceci devrait fonctionner pour renvoyer les positions de chaîne:
$html = "dddasdfdddasdffff";
$needle = "asdf";
$lastPos = 0;
$positions = array();
while (($lastPos = strpos($html, $needle, $lastPos))!== false) {
$positions[] = $lastPos;
$lastPos = $lastPos + strlen($needle);
}
// Displays 3 and 10
foreach ($positions as $value) {
echo $value ."<br />";
}
, Vous pouvez appeler le strpos
fonction à plusieurs reprises jusqu'à ce qu'une correspondance n'est trouvée. Vous devez spécifier le paramètre offset.
remarque: dans l'exemple suivant, la recherche se poursuit à partir du caractère suivant au lieu de la fin de la correspondance précédente. Selon cette fonction, aaaa
contient trois occurrences de la sous-chaîne aa
, pas deux.
function strpos_all($haystack, $needle) {
$offset = 0;
$allpos = array();
while (($pos = strpos($haystack, $needle, $offset)) !== FALSE) {
$offset = $pos + 1;
$allpos[] = $pos;
}
return $allpos;
}
print_r(strpos_all("aaa bbb aaa bbb aaa bbb", "aa"));
Sortie:
Array
(
[0] => 0
[1] => 1
[2] => 8
[3] => 9
[4] => 16
[5] => 17
)
Il vaut mieux utiliser substr_count
. Découvrez sur php.net
function getocurence($chaine,$rechercher)
{
$lastPos = 0;
$positions = array();
while (($lastPos = strpos($chaine, $rechercher, $lastPos))!== false)
{
$positions[] = $lastPos;
$lastPos = $lastPos + strlen($rechercher);
}
return $positions;
}
Cela peut être fait en utilisant strpos () fonction. Le code suivant est implémenté en utilisant for loop. Ce code est assez simple et assez simple.
<?php
$str_test = "Hello World! welcome to php";
$count = 0;
$find = "o";
$positions = array();
for($i = 0; $i<strlen($str_test); $i++)
{
$pos = strpos($str_test, $find, $count);
if($pos == $count){
$positions[] = $pos;
}
$count++;
}
foreach ($positions as $value) {
echo '<br/>' . $value . "<br />";
}
?>