J'ai la chaîne suivante: Je l'analyse en l'exécutant via la fonction suivante: p> où < Code> $ Num_Dogs code> est une variable prédéfinie. Selon Le problème est que, dans le cas où "l'homme a 1 chiens", chien em> est pluralisé, non souhaité. Je sais que cela pourrait être résolu simplement en n'utilisant pas la fonction mais dans ma demande, je fais une analyse plus que juste J'ai besoin d'une manière abrégée que je peux écrire dans l'initiale Par exemple, laissez p> est-il clair ce qui s'est passé à la fin? Je suis tenté de lancer la création d'un tableau en utilisant la partie à l'intérieur des crochets qui est après la barre verticale, puis de comparer la clé du nouveau tableau avec la valeur analysable de {NUM_DOGS} (qui, par sera désormais la variable num_dogs $ à gauche de la barre verticale), et renvoie la valeur de l'entrée de tableau avec cette touche. p> Si ce n'est pas tout à fait déroutant, est-il possible à l'aide du preg_ * fonctions? p> p > $ num_dogs code>, cela pourrait renvoyer l'une des chaînes suivantes: p>
parse_text code> et à faire quelque chose comme: p> {num_dogs} code> et il faut beaucoup de lignes pour écrire toutes les conditions. P> $ string code> que je peux traverser un analyseur, ce qui ne me limiterait pas à seulement deux possibilités vraies / fausses. p>
4 Réponses :
Tout d'abord, il est un peu discutable, mais si vous pouvez l'éviter facilement, passez simplement Ensuite, pour obtenir le "S", je fais généralement quelque chose comme ceci: p> puis fait quelque chose comme ceci: p> $ num_dogs code> comme argument à la fonction car la plupart des gens croient que les variables globales sont diaboliques! switch $num_dogs {
case 0:
return 'dogs';
break;
case 1:
return 'dog called fred';
break;
case 2:
return 'dogs called fred and harry';
break;
case 3:
return 'dogs called fred, harry and buster';
break;
}
Le principe de votre question est que vous souhaitez
Pour des citations imbriquées, vous pouvez probablement facilement permettre à un caractère d'échappement (\ est traditionnel, bien sûr), sans avoir besoin d'une regex récursive. Ne fonctionnera cependant pas pour les accolades imbriquées.
Dans une pincée, j'ai fait quelque chose de similaire à ce que vous demandez avec une implémentation vaguement comme le code ci-dessous.
Ceci n'est nulle part comme une caractéristique riche en tant que réponse @ Mike, mais cela a fait l'affaire dans le passé. p> Voici quelques exemples similaires à votre question originale ... p> La sortie est la suivante: p> L'homme a 2 chiens. P>
L'homme a 1 chien. P>
BlockQuote> Il peut être intéressant de mentionner que, dans des projets plus importants, j'ai invariablement terminé par la saisie de toute inflexion personnalisée en faveur de GNU GetText qui semble être la voie la plus saine une fois que la multi-linguelle est une exigence. P> P>
Cela a été copié d'une réponse postée par Flulsence de retour en 2009 en réponse à Cette question : em> strong>
Je reçois comment
{NUM_DOGS} code> est transmis à la fonction, mais lorsque vous commencez à mentionner les noms de chiens, vous venez de me jeter complètement désactivé. Comment sont-ils passés à la fonction?Si la chaîne est considérée comme super, super sûre. Cela peut très facilement être fait en utilisant
eval code> php.net/manual /function.val.phpIls ne sont pas transmis individuellement à la fonction, ils vont juste pour le trajet car ils sont contenus dans les
$ string code>. Laissez$ num_dogs = 2 code>. Après avoir traverséparse_text code>$ string = L'homme a 2 [2 | 0 => "chiens", 1 => "chien appelé Fred", 2 => "Chiens appelés Fred and Harry" , 3 => "Chiens appelés Fred, Harry et Buster"]. Code>Windows utilise ce format parfois des fichiers. Peut-être chien (s) :)
@Ankush - Oui, ce serait adéquat si je n'avais que deux options, chiens ou chiens. Je veux montrer un message personnalisé pour chaque nombre de chiens.
Pouvez-vous avoir quelque chose comme
'l'homme a {num_dogs} {chiens}' code>, avec un autrestr_replace code> pour{chiens} code>?