[RESOLU] Condition IF dans une function

Eléphant du PHP | 213 Messages

21 avr. 2022, 09:28

Bonjour,
J'ai cette function qui fonctionne très bien quand ma chainre de balise est ainsi.

Code : Tout sélectionner

[ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON]4[[DEM_PDT_PCF < ASSET_XXX> < TPX_1>]

Code : Tout sélectionner

<?PHP function precedent() { echo 'function'; // global $reste; // $_SESSION['Balises2'] = $GLOBALS[$_SESSION['Balises2']]; $d = $_SESSION['Balises2'] ; $regex = "/(.*)[0-9]+\\[.*\\]/"; preg_match($regex, $d, $resultats); $_SESSION['Balises2'] = $resultats[1]; // $reste contient la chaine sans le dernier morceau echo $resultats[1]; } ?>
Le souci est que parfois ma chaine de balises est comme ça.

Code : Tout sélectionner

[ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON]4
j'aimerai dire.
si la chaine se termine bien par un crochet "[ADC_START][SDP]1[GUICHET]" alors appliquer la function.
sinon (ne rein faire)

Code : Tout sélectionner

$_SESSION['Balises2'] = $GLOBALS[$_SESSION['Balises2']];
Je ne sais pas inclure des if dans une function.
Merci.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

Eléphant du PHP | 213 Messages

21 avr. 2022, 09:30

bonjour,
J'ai fait cette condition.

Code : Tout sélectionner

<?PHP function precedent() { //echo 'function'; // global $reste; // $_SESSION['Balises2'] = $GLOBALS[$_SESSION['Balises2']]; $d = $_SESSION['Balises2'] ; if (strpos($d, '[""]') !== false){ $regex = "/(.*)[0-9]+\\[.*\\]/"; preg_match($regex, $d, $resultats); $_SESSION['Balises2'] = $resultats[1]; // $reste contient la chaine sans le dernier morceau echo $resultats[1].'function IF'; } else{ $_SESSION['Balises2'] = $d; echo $d.'funtion ElseIF'; } } ?>
Mais cela fait rentrer que dans le else.
Merci
De retour au PHP pour essayer de préserver mon emploi à 59 ans.

ynx
Mammouth du PHP | 586 Messages

21 avr. 2022, 12:48

Bonjour Wisefun,

Ta condition strpos($d, '[""]') !== false ne semble en effet pas correcte (elle sera toujours false). Avec cette instruction, strpos() cherche si la chaine '[""]' est présente dans la variable $d, or cette chaine n'existe pas dans cette variable.

Si tu utilises PHP 8, tu peux utiliser la nouvelle fonction str_ends_with() pour vérifier si la chaine se termine par un crochet fermant ou non :
https://www.php.net/manual/fr/function. ... s-with.php

Si tu utilises une version antérieur de PHP, tu peux aussi accéder aux caractères d'une chaine en y accédant comme un tableau, par exemple :
<?php

$d = '[ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON]4[[DEM_PDT_PCF < ASSET_XXX> < TPX_1>]';

// affiche le premier caractère de la chaine $d
echo $d[0]; // [

// affiche le deuxième caractère de la chaine $d
echo $d[1]; // A

// affiche le dernier caractère de la chaine $d
echo $d[strlen($d) - 1]; // ]

if ($d[strlen($d) - 1] === ']') {
	echo 'la chaine $d se termine par un crochet fermant';
} else {
	echo 'la chaine $d ne se termine pas par un crochet fermant';
}

Eléphant du PHP | 213 Messages

21 avr. 2022, 13:52

Bonjour ynx,
Tu es un devin.
Justement je cherche comment transformer cette chaine en tableau, pour pouvoir par la suite classer correctement les balises.
Donc je vais suivre ton conseil.
Et ta solution fonctionne à merveille pour la function. =D> =D> =D> =D>
Merci.
De retour au PHP pour essayer de préserver mon emploi à 59 ans.