Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Site Web > PHP > Vos Fonctions ou astuces > Lecture du sujet

Vos Fonctions ou astuces

Vous devez être inscrit pour pouvoir poster des messages

Page : Précédente  1  2  3  ...  72  73  74  75  76  77  78  ...  97  98  99  100  Suivante
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : Précédente  1  2  3  ...  72  73  74  75  76  77  78  ...  97  98  99  100  Suivante
Hors ligne Bilbax # Posté le 29/02/2008 à 22:33:17
www.bilbax.eu
Avatar
Groupe : Membres
Reprise du dernier message de la page précédente :
`Haku > Comment tu expliques que faire

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $moo = 'AA';
  3. $moo++;


Donne AB alors que AA n'est pas un caractère (mais bien deux) ? :euh:
Hors ligne anonyme # Posté le 29/02/2008 à 22:36:19
Groupe :
PHP est très opaque sur l'inférence et sa gestion des types.
Dans un langage fortement typé comme le java, ce que tu as écrit là ne fonctionnerait pas.

Donc je ne sais pas te dire pourquoi ce code fait ce qu'il fait. ^^
Hors ligne Savageman # Posté le 29/02/2008 à 22:42:30
Insa : If inside
Avatar
Groupe : Membres
Encore (AA++ == AB) j'arrive plus ou moins comprendre la logique, mais (Z++ == AA), là je suis complètement largué :D
 
Hors ligne anonyme # Posté le 29/02/2008 à 22:44:39
Groupe :
Y a même pas de type char pour nous en PHP, var_dump('a') retourne string(1) "a".

Y a pleins de points précis assez obscurs en PHP.

Citation : Savageman
Encore (AA++ == AB) j'arrive plus ou moins comprendre la logique, mais (Z++ == AA), là je suis complètement largué :D

Bah en fait c'est plutôt le AA++ = AB qui est étrange.
ord(A) -> 65
ord(AA) -> 65
ord(AB) -> 65
Donc on penserait que ord() ne tient compte que du premier caractère.
ord(AA+1) -> 66
Ca appuie l'idée précédente.
Mais là ça devient bizarre :
ord(Z) -> 90
ord(Z+1) -> 49 o_O (chr(49) -> 1)
Hors ligne flioux # Posté le 29/02/2008 à 22:54:37
IUTiste
Avatar
Groupe : Membres
Perso je trouve ça logique.
A,B,...,Y,Z,AA,AB,...,AY,AZ,BA,BB,...

Je vois ça comme ça!

A+

Bientôt :
iutdijon.eu
iutinfo.eu
 
Hors ligne Savageman # Posté le 29/02/2008 à 22:57:13
Insa : If inside
Avatar
Groupe : Membres
Si 'AA' est une chaîne de deux entiers, alors elle est représenté numériquement par (65 65) dans la mémoire. Faire un ++ revient à augmenter la valeur dans la mémoire de 1 (enfin, en PHP c'est vachement plus compliqué apparement), donc (65 65)++ deviendrait (65 66), soit 'AB' dans une certaine logique.
Pour le Z, le mystère est entier :D
 
Hors ligne Cortexd # Posté le 29/02/2008 à 22:57:45
Maouunnwww !
Avatar
Groupe : Membres
c'est vaguement expliqué ici : http://fr.php.net/manual/fr/language.operators.increment.php
sinon pour générer des lettres on peut aussi faire : range('a', 'z');

Comme l'or, il est caresse et volupté...
Image utilisateur Arrêt sur image


 
Hors ligne manene # Posté le 01/03/2008 à 14:12:48
Mens sana in corpore sano !
Avatar
Groupe : Membres
Citation : Bilbax
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2.         function creerAlphabet()
  3.         {
  4.                 //...
  5.                 return substr($t, 0, strlen($t)-2);
  6.         }
  7. ?>


Moi, j'aurais fait :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2.         function creerAlphabet()
  3.         {
  4.                 return rtrim($t, ', ');
  5.         }
  6. ?>


Sinon, je ne savais pas non plus pour le A, B, ... Z, AA, AB, ...
C'est effectivement assez intéressant... et bizarre !

Cordialement,
manene.
 
Hors ligne JeromeJ # Posté le 02/03/2008 à 02:28:53
Avatar
Groupe : Membres
Un array_map qui accepte d'autre arguments que des array:

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. define('MAP_MIN', -1);
  3. define('MAP_MAX', -2);
  4. define('ARRAY_MAP_DEFAULT', MAP_MAX); // Au choix
  5.  
  6. function array_map2($ref)
  7. {
  8.         if(is_array($ref)) list($ref, $get) = $ref;
  9.         else if(is_string($ref)) $get = ARRAY_MAP_DEFAULT;
  10.         else error('$ref (arg[0]) must be a string or an array', __FUNCTION__);
  11.        
  12.         $args = func_get_args();
  13.         array_shift($args);
  14.        
  15.         $count = func_num_args()-1;
  16.        
  17.         if(in_array($get, array(MAP_MIN, MAP_MAX)))
  18.         {
  19.                 for($i = 1, $array = array(); $i < $count; $i++) if(is_array($args[$i])) $array[] = count($args[$i]);
  20.                
  21.                 if($get === MAP_MIN) $get = min($array);
  22.                 else if($get === MAP_MAX) $get = max($array);
  23.         }
  24.         else if(!is_int($get) || $get < 0) error('$get (arg[0][1]) need a natural number not null', __FUNCTION__);
  25.        
  26.         for($i = 0, $array = array(), $result = array(); $i < $get; $i++, $array = array())
  27.         {
  28.                 for($a = 0; $a < $count; $a++)
  29.                 {
  30.                         if(is_array($args[$a]))
  31.                         {
  32.                                 if(count($args[$a]) == 1) $args[$a] = $args[$a][0];
  33.                                 else
  34.                                 {
  35.                                         $array[] = array_shift($args[$a]);
  36.                                         continue;
  37.                                 }
  38.                         }
  39.                        
  40.                         $array[] = $args[$a];
  41.                 }
  42.                
  43.                 $result[] = call_user_func_array($ref, $array);
  44.         }
  45.        
  46.         return $result;
  47. }
  48.  
  49. // Exemple
  50. show_array(array_map2('str_replace', 'machin', 'chose', $array));
  51. ?>
Si vous avez des questions ou que vous avez mieux, faites savoir. Merci :)

Ainsi qu'un array_rand récursif (mais qui retourne la valeur et non l'index parcontre):
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. function array_rand_r($array, $nb = 1)
  3. {
  4.         if(!is_array($array)) error('$array (arg[0]) must be an array', __FUNCTION__);
  5.         if(!is_int($nb) || $nb < 1) error('$nb (arg[1]) must be a number bigger than 1', __FUNCTION__);
  6.        
  7.         $found = $array[array_rand($array)];
  8.        
  9.         if(is_array($found)) return array_rand_r($found);
  10.        
  11.         if($nb === 1) return $found;
  12.        
  13.         return array_merge((array)$found, (array)array_rand_r($array, $nb-1));
  14. }
  15. ?>
Édité le 02/03/2008 à 05:19:37 par JeromeJ








Secret (cliquez pour afficher)
Ce que je maitrise actuellement: XHTML, CSS, PHP, Action Script 2 et 3, JavaScript, SQL, Python, et un peu de C, C++ et d'erl
 
Hors ligne strucky # Posté le 02/03/2008 à 11:28:15
Jamais content !
Avatar
Modérateurs
Citation : JeromeJ
Si vous avez des questions ou que vous avez mieux, faites savoir. Merci :)


Oui, elle sert à quoi ta fonction ?
Perso, j'ai pas bien compris son but.

Ensuite un array_rand() récursif, ça pourrait servir à quoi ?
Édité le 02/03/2008 à 13:51:05 par strucky
Hors ligne Talus # Posté le 02/03/2008 à 13:17:28
タルス
Avatar
Groupe : Membres
Je me le demande aussi. Surtout que la première fonction, ben... Si c'est pas un array, autant appliquer la fonction directement :-°
 
Hors ligne Caim # Posté le 02/03/2008 à 14:06:56
Groupe : Membres
Auteur: Caim
Type: Formatage de données
But: Remplacer des mots connus par des liens
Code:
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. function Lien($text)
  3. {
  4.         //mysql_connect("localhost", "root", "motdepasse");
  5.         //mysql_select_db("BDD");
  6.         //$reponse = mysql_query("SELECT * FROM table");
  7.  
  8. str_replace(',', ' ,', $text);
  9. str_replace('.', ' .', $text);
  10.  
  11. while ($donnee = mysql_fetch_array($reponse))
  12.         {
  13.                 str_replace(''.$donnee['mot'].'', '<a href="'.$donnee['mot'].'">'.$donnee['mot'].'</a>', $text);
  14.         }
  15.  
  16. str_replace(' ,', ',', $text); //on remet normale
  17. str_replace(' .', '.', $text); //on remet normale
  18. }
  19. ?>

Consigne:Il faut créer une table [du nom que vous voulez] et il faut qu'elle posséde un champs "mot" contenant tous les mots qui doivent être transformer en lien
Et compléter les commentaires

Citation : Rendu
Aujourd'hui Mr.x à donner pour la 1er fois une représentation de son spectacle "Pestacle"


Il faudrais trouver un nom plus aproprié a la fonction, et peut être l'optimiser(je sais pas)
Hors ligne JaKhris # Posté le 02/03/2008 à 14:16:16
Wait & See
Avatar
Groupe : Membres
J'aurai plus fait comme ça (et c'est pas super optimisé encore :p ) :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. mysql_connect('localhost', 'root', 'motdepasse');
  3.  
  4. function add_link($text)
  5. {
  6. $reponse = mysql_query('SELECT mot FROM table') or die(mysql_error());
  7.  
  8. $text = str_replace(array(',', '.'), array(' ,', ' .'), $text);
  9.  
  10. while ($donnee = mysql_fetch_assoc($reponse)) // mysql_fetch_assoc
  11. {
  12.      $text = str_replace($donnee['mot'], '<a href="'.$donnee['mot'].'">'.$donnee['mot'].'</a>', $text); // Tu concatènes sans utilité
  13. }
  14.  
  15. $text = str_replace(array(' ,', ' .'), array(',', '.'), $text); // On remet à la normale
  16. }
  17. ?>


M'enfin je sais pas trop, cette fonction pour ma part ne pourrait pas m'être utile, et je comprends pas l'utilisation du str_replace sur les virgules et points. :o
Et même, pourquoi pas fait ça hors-fonction, la connexion MySQL ?
Édité le 02/03/2008 à 14:57:42 par JaKhris

Mes sites : JAKPRO ~ URPRO ~ page Flickr
XHTML, CSS, JS, PHP, MySQL, Graphics, Music & Video Games : This is living ! =D
 
Hors ligne JeromeJ # Posté le 02/03/2008 à 14:21:04
Avatar
Groupe : Membres
Citation : strucky
Citation : JeromeJ
Si vous avez des questions ou que vous avez mieux, faites savoir. Merci :)


Oui, elle sert à quoi ta fonction ?
Perso, j'ai pas bien compris son but.

Ensuite un array_rand() récursif, ça pourrait servir à quoi ?
Pour l'array_map, si on veut appliquer une fonction et passer d'autre paramètre que des array ça fonctionne pas. Or ce n'est pas possible; avec la mienne oui. J'y ai de plus ajouter un délimiteur avec 3 options (MAX, MIN ou personalisé) agissant comme tel:

Exemple: Prenons $arg0 = array(1, 2, 3, 4, 5) et $arg1 = array(1, 2, 3), $arg2 = n'importe quel valeur autre qu'un array

- $arg0[0], $arg1[0] et $arg2 seront traités
- $arg0[1], $arg1[1] et $arg2 ...
- $arg0[2], $arg1[2] et $arg2 ...
Si l'option MIN est activée, alors on s'arrête ici. Sinon ...
- $arg0[3], $arg1[2] et $arg2 ...
- $arg0[4], $arg1[2] et $arg2 ...

Pour array_rand_r,
Exemple: Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. // Sans oublier que c'est une valeur et non un index qui est retourné.
  3. // Si array_rand retournerait des valeurs, il ne retournerait que des array dans le cas présent
  4. array_rand_r(array(array(':)', '=)'), '^^', array(array('=p', '=P'), array(':p', ':P')), array('<<', '>>'));
  5. ?>


@Caim et JaKhris: Tiens je savais pas que str_replace passait en référence :p (à part son quatrième argument $count)
Édité le 02/03/2008 à 14:26:22 par JeromeJ








Secret (cliquez pour afficher)
Ce que je maitrise actuellement: XHTML, CSS, PHP, Action Script 2 et 3, JavaScript, SQL, Python, et un peu de C, C++ et d'erl
 
Hors ligne strucky # Posté le 02/03/2008 à 15:27:00
Jamais content !
Avatar
Modérateurs
J'ai toujours pas compris malgré tes explications à quoi sert ta fonction o_O

Je dois vraiment être con :/
Hors ligne Talus # Posté le 02/03/2008 à 15:37:47
タルス
Avatar
Groupe : Membres
Surtout, ce que je demande à voir, c'est si tu veux choisir plusieurs clés aléatoirement :-°

@strucky > En fait, je t'avouerais que t'es pas le seul.
 
Hors ligne JeromeJ # Posté le 02/03/2008 à 17:36:35
Avatar
Groupe : Membres
@strucky, bah tu n'as jamais utilisé array_map ? Elle permet d'effectuer une fonction sur chaque élément des tableaux donnés: ça fonctionne comme ceci: si on met array_map('machin', $array, $array2) pou chaque élement on aura ça machin($array[0], $array[1]) etc. Mais si je veux effectuer une fonction et lui donner des paramètres autre que des array redistribué dynamiquement ? array_map('str_replace', 'XY' 'XX', $array) ne fonctionne pas... Avec ma fonction si.

@Talus: Euh Oo j'vois pas où est le prob ... il renvoit un tableau de valeur au lieu d'une seule ^^'








Secret (cliquez pour afficher)
Ce que je maitrise actuellement: XHTML, CSS, PHP, Action Script 2 et 3, JavaScript, SQL, Python, et un peu de C, C++ et d'erl
 
Hors ligne Talus # Posté le 02/03/2008 à 17:42:30
タルス
Avatar
Groupe : Membres
Justement : Ou est l'interet de faire un array_map sur des chaines de caracères, alors que l'appel de la fonction suffit ?

Au pire, faire un array_map récursif (je crois que y'en a déjà eu un), et le faire sur func_get_args...
Édité le 02/03/2008 à 17:43:04 par Talus
 
Hors ligne strucky # Posté le 02/03/2008 à 18:08:48
Jamais content !
Avatar
Modérateurs
Citation : JeromeJ
@strucky, bah tu n'as jamais utilisé array_map ? Elle permet d'effectuer une fonction sur chaque élément des tableaux donnés: ça fonctionne comme ceci: si on met array_map('machin', $array, $array2) pou chaque élement on aura ça machin($array[0], $array[1]) etc. Mais si je veux effectuer une fonction et lui donner des paramètres autre que des array redistribué dynamiquement ? array_map('str_replace', 'XY' 'XX', $array) ne fonctionne pas... Avec ma fonction si.

@Talus: Euh Oo j'vois pas où est le prob ... il renvoit un tableau de valeur au lieu d'une seule ^^'


Eh si je sais à quoi sert un array_map() ou array_walk()
Mais comme dit Talus, à quoi ça sert d'utiliser une fonction de tableaux sur une chaîne ?

Vraiment, je vois pas du tout .
Hors ligne JeromeJ # Posté le 02/03/2008 à 18:35:34
Avatar
Groupe : Membres
Euh je comprend pas bien ce que vous venez d'me sortir là O_O' Serait-ce à cause de l'exemple que j'ai pris ? =/

@Talus: le mien n'est pas fais avec func_get_args ? =)








Secret (cliquez pour afficher)
Ce que je maitrise actuellement: XHTML, CSS, PHP, Action Script 2 et 3, JavaScript, SQL, Python, et un peu de C, C++ et d'erl
 
Hors ligne DHKold # Posté le 06/03/2008 à 01:48:31
Ex-Admin
Avatar
Groupe : Membres
On peut aisément faire plus simple:

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. function array_map3($callback){
  3.     $args = func_get_args();
  4.     array_shift($args);
  5.     $max = max(array_map('count',$args));
  6.     foreach($args as $k=>$v) $args[$k] = array_pad(is_array($v) ? $v : array(),$max,is_array($v) ? array_pop($v) : $v);
  7.     array_unshift($args,$callback);
  8.     return call_user_func_array('array_map',$args);
  9. }
  10. ?>


Et si vraiment tu veux utiliser tes MIN et MAX machin, tu utilise un array_slice() :)

Image utilisateur
Ouverture prochaine
----------
Pack DHemoticons (Utilisation Libre) : Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur
 
Hors ligne Dentuk # Posté le 09/03/2008 à 16:40:13
Yamo...
Avatar
Groupe : Membres
array_map a été faite pour pouvoir être utilisée avec des fonctions utilisateur : pour moi c'est beaucoup plus clair et simple de faire ça (par exemple):
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. function machin2chose($chaine) {
  3.     return str_replace('machin', 'chose', $chaine);
  4. }
  5. print_r(array_map('machin2chose', $tableauDeChaines));
  6. ?>
Édité le 09/03/2008 à 16:41:46 par Dentuk

Image utilisateur
 
Hors ligne Cortexd # Posté le 09/03/2008 à 16:50:21
Maouunnwww !
Avatar
Groupe : Membres
str_replace() fonctionne aussi avec des tableaux, tu peux écrire :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. print_r(str_replace('machin', 'chose', $tableauDeChaines));

Comme l'or, il est caresse et volupté...
Image utilisateur Arrêt sur image


 
Hors ligne Dentuk # Posté le 09/03/2008 à 17:07:14
Yamo...
Avatar
Groupe : Membres
Citation : Cortexd
str_replace() fonctionne aussi avec des tableaux, tu peux écrire :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. print_r(str_replace('machin', 'chose', $tableauDeChaines));
Ah ouais tiens je savais même pas. :o
Enfin c'était qu'un exemple.

Image utilisateur
 
Hors ligne Neoterranos # Posté le 16/03/2008 à 03:15:38
Oh my god, they killed Kenny !
Avatar
Groupe : Membres
bbcode couleurs, utiliser des noms français avec un array :
Merci à Strucky qui, à l'époque, m'avait donné la fonction nécessaire et utile pour faire marcher ce code : preg_replace_callback

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. function remplacementCouleur($m)
  3. {
  4.     global $arrCouleur;
  5.     return '<span style="color : ' . $arrCouleur[$m[1]] .';">' . $m[2] . '</span>';
  6. }
  7. $texte = preg_replace_callback('#&lt;couleur nom="(' . implode('|', array_keys($arrCouleur)) . ')"&gt;(.+)&lt;/couleur&gt;#isU', 'remplacementCouleur', $texte);
  8. ?>


Exemple :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $arrCouleur = array(
  3. 'rouge' => 'red',
  4. 'vert' => 'green',
  5. 'bleu' => 'blue',
  6. );
  7. $texte = htmlspecialchars('Je teste les <couleur nom="rouge">Couleurs</couleur>', ENT_NOQUOTES);
  8. //On imagine que $texte est le post d'un visiteur.
  9. ?>


Retournera normalement (la dernière fois que je l'ai testée ça marchait !!) :
Citation : -
Je teste les Couleurs
Édité le 16/03/2008 à 03:16:40 par Neoterranos

Image utilisateur
Perdu sur le SdZ ? Clique ici ! Perdu sur CCDS ? Clique ici !
 
Hors ligne Talus # Posté le 16/03/2008 à 11:31:52
タルス
Avatar
Groupe : Membres
Vaut mieux une classe CSS (couleur_rouge par exemple), comm, ca pas d'emmerdements à faire un callback :p
 
Hors ligne Neoterranos # Posté le 16/03/2008 à 15:30:14
Oh my god, they killed Kenny !
Avatar
Groupe : Membres
Pas si sûr, comment tu ferais ça toi?

Image utilisateur
Perdu sur le SdZ ? Clique ici ! Perdu sur CCDS ? Clique ici !
 
Hors ligne Talus # Posté le 16/03/2008 à 15:46:27
タルス
Avatar
Groupe : Membres
Code : CSS - Afficher / masquer les numéros de ligne
  1. .couleur_rouge {
  2.    color:red;
  3. }
  4.  
  5. .couleur_bleu {
  6.    color:blue;
  7. }
  8.  
  9. .couleur_cheloue {
  10.    color:#AABBCC; /* Au pif :p */
  11. }


Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $str = preg_replace('`&lt;couleur nom="(.+?)"&gt;(.+?)&lt;/couleur&gt;`s', '<span class="couleur_$1">$2</span>', $str);


Tout bêtement... Si la couleur existe pas, ce sera en noir :-°
 
Hors ligne Neoterranos # Posté le 16/03/2008 à 15:55:59
Oh my god, they killed Kenny !
Avatar
Groupe : Membres
Je suis pas réveillé je l'avoue ^^ ça paraît assez évident, mais je vais benchmarker pour voir si y a une réelle différence (hormis celle du CSS plus gros dans un cas)

Image utilisateur
Perdu sur le SdZ ? Clique ici ! Perdu sur CCDS ? Clique ici !
 
Hors ligne shine-neko # Posté le 16/03/2008 à 15:58:06
Saite ita no wa My Rosy Heart
Avatar
Groupe : Membres
Citation : Neoterranos
Je suis pas réveillé je l'avoue ^^ ça paraît assez évident, mais je vais benchmarker pour voir si y a une réelle différence (hormis celle du CSS plus gros dans un cas)


La difference c'est que c'est moins lourd et plus facile de rajouter des couleurs

La v3 de Shine-Shiina est sortit
Qui n'a jamais rêver d'apprendre a dessiner , Cuisiné japonnais dévorer de nouveaux manga fait par des copains et d'apprendre le japonais ?
=> La réponse se trouve ici
Image utilisateur

 
Hors ligne Neoterranos # Posté le 16/03/2008 à 16:29:17
Oh my god, they killed Kenny !
Avatar
Groupe : Membres
Si tu sais pas modifier un array, c'est ton problème.
Malgré tout, je me plie, la solution de Talus, à laquelle je n'avais pas pensé prend deux fois moins de temps que la mienne, 1,8 sec pour 100000 passages contre 3.5 pour la mienne.

Merci Talus, j'ai parlé trop vite.

Image utilisateur
Perdu sur le SdZ ? Clique ici ! Perdu sur CCDS ? Clique ici !
 

Retour au forum "PHP" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 95 Zéros connectés | Requêtes SQL 6 requêtes | Temps de génération de la page : Total (SQL) 0.1065s (0.0907s)