FONCTION QUI RENVOIE UNE CHAINE DIFFERENTIELLE

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 25 nov. 2005 à 20:17
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 30 nov. 2005 à 08:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34796-fonction-qui-renvoie-une-chaine-differentielle

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 nov. 2005 à 08:48
Je n'ai pas dit que le code était pourri ;-)
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
30 nov. 2005 à 01:05
ben ouais , comme ça c'est plutôt mieux, mais j'en avais besoin dans un cas précis quand les 2 chaines débutaient par le premier paramètre et je ne connaissais pas cette utilisation de substr_replace.Donc je m'étais arrêter à ce cas.
C'est vrai que 'chaine différentielle' est peut être une mauvaise dénomination. Enfin bon, voilà la fonction est postée et des fois y'a pire comme code.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
29 nov. 2005 à 09:29
Hello,

j'ai du mal avec ta fonction :

echo ( differential_str("salut","les gars : salut") );//retourne -1
echo ( differential_str("salut","hey, salut les gars") );//retourne -1

Bref, ta fonction ne fonctionne que si la chaîne $comparestr débute par $refstr.
Quel intérêt alors par rapport à une fonction comme strstr() ? A part que tu renvoie 1 ou -1 selon si les chaînes sont égales ou ne sont pas comparables ?
echo substr (strstr ('salut les gars', 'salut'), strlen('salut'));
fait la même chose que ta fonction.
Et même, si on suit ton raisonnement, faire un vrai différentiel entre 2 chaînes (on peut même ajouter la gestion de la casse facilement) :

<?php
function strDiff ($haystack, $needle) {
if (false !($pos strpos ($haystack, $needle))) {
$retour = substr_replace($haystack, '', $pos, strlen($needle));
if ($retour === '') {
return $retour = 1;
}
return $retour;
}
return $retour = -1;
}
echo strDiff ('hey, salut les gars !', 'salut'), '
'; // retourne 'hey, les gars !'
echo strDiff ('salut les gars', 'salut'), '
'; // retourne 'les gars'
echo strDiff ('salut', 'salut'), '
'; // retourne 1
echo strDiff ('rien à voir', 'salut'), '
'; // retourne -1
?>

Ou alors, je n'ai pas pigé le véritable but de ta source ;-)
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
26 nov. 2005 à 12:34
Ok c'est vrai je vais modifier
Naixn Messages postés 455 Date d'inscription mardi 17 septembre 2002 Statut Membre Dernière intervention 22 juillet 2007
26 nov. 2005 à 12:30
Je sais bien, c'est bien pour ça que dans mon for, je le fais à l'initialisation :)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
26 nov. 2005 à 12:29
Nan, c'est parce que quand tu utilises count() dans une boucle, il va te recompter à chaque fois ton tableau.
Donc, tu le fais avant :)
Naixn Messages postés 455 Date d'inscription mardi 17 septembre 2002 Statut Membre Dernière intervention 22 juillet 2007
26 nov. 2005 à 12:29
Oui, mais ne retourne en aucun cas le texte qui est en plus dans l'une des deux chaînes comparées :)
Regarde ses exemples, il me semble pourtant qu'ils soient assez clairs :-/
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
26 nov. 2005 à 12:25
Mais il me semble que la focnction strcmp parse aussi toute la chaine non?
Naixn Messages postés 455 Date d'inscription mardi 17 septembre 2002 Statut Membre Dernière intervention 22 juillet 2007
26 nov. 2005 à 11:32
Question con, mais pourquoi est-il mieux de faire
$nb = count($machin);
while ($i < $nb)
{
// Statement
$i++
}

plutôt que :

for ($nb count($machin), $i 0; $i < $nb; $i++)
{
// Statement
}

?
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
25 nov. 2005 à 20:17
Salut,

plutôt que de parser toute la chaîne pour savoir si elles sont identiques ou pas, utilise la fonction strcmp($chaine1,$chaine2)

ensuite dans les boucles mets une variable $nb=count($machin);

while($i<$nb)
{

$i++;
}

plutôt que for($machin=0;$machin<count($blabla);$machin++)
{

}
Rejoignez-nous