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?

42
demandé sur Salman A 2013-04-01 07:55:51

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 />";
}
67
répondu Adam Plocher 2015-05-12 13:05:13

, 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
)
13
répondu Salman A 2014-12-06 15:40:20

Il vaut mieux utiliser substr_count . Découvrez sur php.net

9
répondu Nirmal Ram 2013-11-14 11:42:06
function getocurence($chaine,$rechercher)
        {
            $lastPos = 0;
            $positions = array();
            while (($lastPos = strpos($chaine, $rechercher, $lastPos))!== false)
            {
                $positions[] = $lastPos;
                $lastPos = $lastPos + strlen($rechercher);
            }
            return $positions;
        }
6
répondu Ryodo 2014-03-08 15:32:21

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 />";
}

?>
3
répondu Kach 2014-02-04 17:14:51

Utilisez preg_match_all pour trouver toutes les occurrences.

preg_match_all('/(\$[a-z]+)/i', $str, $matches);

Pour plus de références ce lien.

3
répondu 웃웃웃웃웃 2015-05-12 13:03:57