IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Comparaison de valeurs


Sujet :

Langage PHP

  1. #21
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 369
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 369
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    il faut préciser au passage que l'utf-8 n'est pas seulement quasi indispensable pour faire des sites multilingues
    Tout dépend des langues, ex pour du français/anglais/espagnol/allemand le ISO-8859-1/15 est tout à fait suffisant.

    mais que c'est l'encodage requis pour pouvoir utiliser des fonctions php comme json_encode
    Oui, et pour certaines extensions telles SimpleXML, pour ça il y a les fonctions utf8_encode/decode.

    Bref, on peut se passer de l'UTF-8 qui n'est finalement pas souvent utile pour le commun des dév, et ce n'est pas PHP6 qui dira le contraire

  2. #22
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    ou alors dans ce cas ne pas tester des mots avec des caractères accentués
    Comme je les pointé, les palindromes ne prennent de toute facon pas en compte les accent ; il faudrait les retirer de la chaine.

    Un palindrome russe (truqué car j'ai retiré les accents)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $mot = "А лис он умeн крыса сыр к нeму носила";
    $lettres = mb_ereg_replace(" ", "", mb_strtolower($mot,  'UTF-8'));
     
    $longueur = mb_strlen($lettres) / 2;
     
    for($i = 0; $i < $longueur; $i++) {
    	if (mb_substr($lettres, $i,1,'UTF-8') != mb_substr($lettres, -$i-1 ,1,'UTF-8')) {
    	    die("pas un palindrome");
            }
    }
    echo "palindrome";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #23
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    @sabotage

    Elle te déplais tant que ça ma méthode ?

    Je dis ça parce que :

    1/ Elle montre au passage une fonction qui permet la mise en tableau d'une chaine multi octets

    2/ Elle est facile à écrire et à comprendre

    3/ Elle fonctionne bien (même avec le chinois)

    4/ Et d'après mes tests, elle est dans tous les cas significativement plus rapide que celle que tu propose : plus de dix fois plus rapide si l'expression testée est un palindrome de quelques mots, et environ trois fois plus rapide sur des mots très courts (cas le plus favorable pour ta méthode) :


    Pour ce test $mot = 'А роза упала на лапу Азора';

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    $mot = 'А роза упала на лапу Азора';
     
    $result = true; 
     
    $time_start = microtime(true);
     
    for ($j=0; $j<1000;$j++)
    {
    	$lettres = mb_ereg_replace(" ", "", mb_strtolower($mot,'UTF-8'));
     
    	$longueur = mb_strlen($lettres) / 2;
     
    	for($i = 0; $i < $longueur; $i++) {
    		if (mb_substr($lettres, $i,1,'UTF-8') != mb_substr($lettres, -$i-1 ,1,'UTF-8')) 
    			{
    				$result = false;
    			}
    }
    $reponse = $result === true ? "L'expression '".$mot."' est un palindrome" : "L'expression '".$mot."' n'est pas un palindrome";
    }
    $time_end = microtime(true);
     
    echo $reponse.'<br />';
    echo '$time = '.($time_end - $time_start).'<br />';
     
    //affiche $time = 0.6318371295929
     
     
     
     
    function mb_str_split( $string ) 
    	{
    		return preg_split('/(?<!^)(?!$)/u', $string );
    	} 
     
    $time_start = microtime(true);
     
    for ($j=0; $j<1000;$j++)
    {		
    	$lettres = str_replace(" ", "", mb_strtolower($mot,"utf-8"));
     
    	$tab_lettres = mb_str_split($lettres);
     
    	$reponse = $tab_lettres === array_reverse($tab_lettres) ? "L'expression '".$mot."' est un palindrome" : "L'expression '".$mot."' n'est pas un palindrome";
    }		
    $time_end = microtime(true);
     
    echo $reponse.'<br />';
    echo '$time = '.($time_end - $time_start).'<br />';
     
    // affiche $time = 0.056771993637085

    C'était assez facile de prévoir la différence de vitesse entre les deux méthodes, par contre je ne comprends pas pourquoi ta méthode refuse de fonctionner pour le chinois : $mot = '上海自来水来自海上'; ("L'eau courante de Shanghai vient de la mer")

  4. #24
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Bref, on peut se passer de l'UTF-8 qui n'est finalement pas souvent utile pour le commun des dév, et ce n'est pas PHP6 qui dira le contraire
    Oui on peut s'en passer mais c'est en passe de devenir le standard donc pourquoi ne pas investir quelques heures (ou maximum quelques jours pour les grands débutants) afin de partir sur des bases pérennes ?

    Par exemple, dans un des derniers sites que j'ai fait pour un fabriquant/importateur, le client voulait pouvoir ajouter depuis la partie administrateur, différentes langues pour la traduction du site pour l'exportation, sans savoir quelles langues à l'avance. Sans l'utf-8 cela aurait été un bin's difficilement gérable....

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 10
    Dernier message: 07/12/2006, 21h52
  2. GTK+ comparaison entier valeur du pointeur
    Par Emyleet dans le forum GTK+ avec C & C++
    Réponses: 10
    Dernier message: 21/07/2006, 16h28
  3. comparaison de valeur sur un résultat de requete
    Par griese dans le forum Langage
    Réponses: 5
    Dernier message: 28/06/2006, 16h23
  4. comparaison de valeurs
    Par Flobynaldo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/05/2006, 17h56
  5. Comparaison de valeurs stockees dans un meme champ
    Par Tartenpion dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/02/2006, 22h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo