Position actuelle: Accueil> Derniers articles> Comment utiliser STRCHR pour localiser la position du dernier caractère spécifié dans une chaîne en PHP?

Comment utiliser STRCHR pour localiser la position du dernier caractère spécifié dans une chaîne en PHP?

gitbox 2025-07-26

Comment utiliser STRCHR pour localiser la position du dernier caractère spécifié dans une chaîne en PHP?

Dans la programmation PHP, les chaînes de traitement sont l'une des tâches les plus courantes. Parfois, nous devons trouver l'emplacement d'un caractère particulier dans une chaîne, et ce n'est pas toujours une simple recherche de gauche à droite. La fonction STRCHR habituelle peut nous aider à trouver l'emplacement où le caractère spécifié apparaît d'abord, mais il ne peut pas nous aider directement à trouver la dernière occurrence d'un caractère. Pour atteindre cette exigence, nous devons utiliser des astuces pour contourner STRCHR pour localiser la position du dernier caractère spécifié dans la chaîne.

Utilisation de base de la fonction STRCHR

Tout d'abord, passons en revue brièvement l'utilisation de base de la fonction STRCHR . StrCHR est une fonction de chaîne en PHP qui trouve l'emplacement où un caractère apparaît pour la première fois dans une chaîne. Sa syntaxe est la suivante:

 <span><span><span class="hljs-title function_ invoke__">strchr</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
  • $ Haystack est la chaîne cible (c'est-à-dire la chaîne que nous recherchons).

  • $ Needle est le caractère ou la sous-chaîne que nous recherchons.

Par exemple:

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strchr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">'o'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$position</span></span><span>;  </span><span><span class="hljs-comment">// Sortir "o, world!"</span></span><span>
</span></span>

Cela renvoie tout du caractère trouvé (y compris le personnage lui-même) à la fin de la chaîne.

Conseils pour localiser le dernier personnage

Bien que StrCHR lui-même ne soutienne pas la position du dernier personnage, nous pouvons le faire de manière intelligente. L'idée spécifique consiste à utiliser la fonction STRREV pour inverser la chaîne, puis à utiliser STRCHR pour trouver la première position d'occurrence du caractère, et enfin la convertir en position dans la chaîne d'origine via Strlen .

Voici un exemple qui montre comment utiliser STRCHR dans PHP pour localiser la position du dernier caractère spécifié dans une chaîne:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">strchr_last</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$haystack</span></span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>) {
    </span><span><span class="hljs-comment">// Inversez la chaîne cible</span></span><span>
    </span><span><span class="hljs-variable">$reversed</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strrev</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>);
    
    </span><span><span class="hljs-comment">// Trouver le premier caractère dans la chaîne inversée</span></span><span>
    </span><span><span class="hljs-variable">$reversed_pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strchr</span></span><span>(</span><span><span class="hljs-variable">$reversed</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);
    
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$reversed_pos</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;  </span><span><span class="hljs-comment">// Si aucun caractère spécifié n&#39;est trouvé,Puis retournerfalse</span></span><span>
    }
    
    </span><span><span class="hljs-comment">// Obtenez la position dans la chaîne inversée</span></span><span>
    </span><span><span class="hljs-variable">$reversed_pos</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$reversed</span></span><span>) - </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$reversed_pos</span></span><span>);
    
    </span><span><span class="hljs-comment">// Renvoie la position dans la chaîne d&#39;origine</span></span><span>
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$reversed_pos</span></span><span>;
}

</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strchr_last</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">'o'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$position</span></span><span>;  </span><span><span class="hljs-comment">// Sortir 7 (Tout de suite "o" La dernière position dans la chaîne d&#39;origine)</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Analyse de code

  1. Fonction STRREV : Tout d'abord, nous utilisons la fonction STRREV pour inverser la chaîne. Cela nous permet d'obtenir indirectement la position du dernier caractère en recherchant le caractère spécifié qui apparaît dans la chaîne.

  2. Fonction STRCHR : Dans la chaîne inversée, nous utilisons la fonction STRCHR pour trouver la première position d'occurrence du caractère.

  3. Conversion de position : Puisque nous trouvons la position de caractère dans la chaîne inversée, nous devons calculer la position du caractère dans la chaîne d'origine par strlen ($ inversé) et strlen ($ reversed_pos) .

Avantages et limitations

L'avantage de cette méthode est que StrCHR lui-même est une fonction très efficace et que le code est concis. Il ne faut que quelques lignes de code pour trouver la dernière position de caractère. La seule limitation est que cette approche repose sur des chaînes inversées, de sorte que ses performances peuvent baisser légèrement lorsqu'ils traitent de très grandes chaînes. De plus, si le personnage n'existe pas dans la chaîne, StrCHR reviendra faux et nous devons également effectuer un traitement correspondant.

Résumer

Bien que StrCHR lui-même ne puisse pas être utilisé directement pour trouver la position du dernier caractère spécifié dans une chaîne, nous pouvons indirectement implémenter cette fonction à travers l'astuce de l'inversion de la chaîne. Cette méthode est simple et efficace, et convient aux scénarios où les positions des personnages doivent être trouvées dans le développement quotidien. Si vous souhaitez trouver facilement l'emplacement du dernier caractère en PHP, essayez cette méthode.