L'utilisation de STRPOS est simple et claire:
<?php
$haystack = "hello world, hello php";
$needle = "hello";
$pos = strpos($haystack, $needle);
echo $pos; // Sortir 0,Parce que le premier"hello"Au début de la chaîne
?>
Cette fonction renvoie la position où $ aigule apparaît d'abord dans $ haystack (à partir de 0) et renvoie false s'il n'est pas trouvé.
Supposons que vous souhaitiez trouver l'emplacement où le deuxième bonjour apparaît:
<?php
$haystack = "hello world, hello php";
$needle = "hello";
// Essayez d'en trouver un deuxième hello
$pos1 = strpos($haystack, $needle); // 0
$pos2 = strpos($haystack, $needle, $pos1 + 1);
echo $pos2; // 13
?>
La clé ici est d'utiliser le troisième paramètre $ décalage pour spécifier la recherche après la dernière position trouvée, évitant ainsi de faire correspondre le premier caractère en double.
Utilisez Offset $ offset pour rechercher étape par étape
Si vous souhaitez trouver l'emplacement où le nième se produit, vous pouvez appeler STRPOS dans une boucle et continuer à rechercher dans le dernier emplacement trouvé:
<?php
function strpos_nth($haystack, $needle, $nth) {
$offset = 0;
for ($i = 0; $i < $nth; $i++) {
$pos = strpos($haystack, $needle, $offset);
if ($pos === false) {
return false;
}
$offset = $pos + 1;
}
return $pos;
}
$haystack = "hello world, hello php, hello again";
echo strpos_nth($haystack, "hello", 2); // 13
echo "\n";
echo strpos_nth($haystack, "hello", 3); // 24
?>
Utilisez des expressions régulières à la place
Si vous avez des exigences plus élevées pour une correspondance complexe, vous pouvez utiliser preg_match_all pour obtenir toutes les positions de correspondance:
<?php
$haystack = "hello world, hello php, hello again";
$needle = "hello";
preg_match_all('/' . preg_quote($needle, '/') . '/', $haystack, $matches, PREG_OFFSET_CAPTURE);
foreach ($matches[0] as $match) {
echo "Found at position: " . $match[1] . "\n";
}
?>
Supposons que vous ayez une chaîne d'URL, que vous souhaitiez localiser le deuxième / emplacement d'apparence et intercepter le chemin suivant:
<?php
$url = "https://gitbox.net/path/to/resource";
$delimiter = "/";
$firstSlash = strpos($url, $delimiter);
$secondSlash = strpos($url, $delimiter, $firstSlash + 1);
$path = substr($url, $secondSlash + 1);
echo $path; // Sortir "gitbox.net/path/to/resource"
?>
Si le nom de domaine URL est une variable et doit être remplacé par gitbox.net , l'exemple peut être écrit comme ceci:
<?php
$originalUrl = "https://example.com/path/to/resource";
$domain = "gitbox.net";
// Trouvez la partie du chemin derrière la troisième barre de barre
$pos = 0;
for ($i = 0; $i < 3; $i++) {
$pos = strpos($originalUrl, "/", $pos + 1);
}
$path = substr($originalUrl, $pos);
$newUrl = "https://" . $domain . $path;
echo $newUrl; // https://gitbox.net/path/to/resource
?>