Trier la colonne d’un tableau sans prendre en compte la casse et les accents

Par défaut, la fonction array_multisort n’est pas casse sensitive et ne gère pas les accents.
Du coup avec un tableau contenant « Allemagne », « Enfant », « Équipe », « Toto », on se retrouve avec l’ordre suivant : Allemagne, Enfant, Toto, Équipe
Pour contourner cela, nous allons faire appel à la fonction array_map afin de nettoyer les données à trier.
<?php $functionSansAccent = function ($chaine) { if (version_compare(PHP_VERSION, '5.2.3', '>=')) $str = htmlentities($chaine, ENT_NOQUOTES, "UTF-8", false); else $str = htmlentities($chaine, ENT_NOQUOTES, "UTF-8"); // NB : On ne peut pas utiliser strtr qui fonctionne mal avec utf8. $str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str); return $str; }; $data[] = array('mots' => 'Toto', 'nb' => 2); $data[] = array('mots' => 'Allemagne', 'nb' => 2); $data[] = array('mots' => 'Enfant', 'nb' => 1); $data[] = array('mots' => 'Équipe', 'nb' => 6); // On récupére les valeur de la première colonne foreach ($data as $key => $row) { $colSort[] = $row['mots']; } //$colSort = array("Allemagne", "Enfant", "Équipe", "Toto"); //On supprime les accents $array_sans_accent = array_map($functionSansAccent , $colSort); //On met en minuscule $array_lowercase = array_map('strtolower', $array_sans_accent); // Ajoute $data en tant que dernier paramètre, pour trier par la clé commune array_multisort($array_lowercase, SORT_ASC, $data); print_r($data); /* Le rendu sera Array ( [0] => Array ( [mots] => Allemagne [nb] => 2 ) [1] => Array ( [mots] => Enfant [nb] => 1 ) [2] => Array ( [mots] => Équipe [nb] => 6 ) [3] => Array ( [mots] => Toto [nb] => 2 ) ) */
Des slides qui ont de la gueule, avec impress.js !

Comme je vous l’avais dit lorsque je vous ai présenté nos vœux 2012, j’ai découvert récemment un outil qui va vous permettre d’en mettre plein la vue à votre auditoire lors de votre prochaine présentation.
Bye bye le vieux Powerpoint des familles, et place aux technos modernes : HTML5, CSS3 et JavaScript. Lire la suite
Limite du nombre de paramètres GET
Aujourd’hui j’ai rencontré un problème sur un site en production et seulement sur la production. Les symptômes ? Perte d’informations passées en paramètres GET. Après quelques recherches, nous avons repéré que $_GET ne contenait pas toutes les informations présentes dans l’url, il manquait les dernières (environ une dizaine de paramètres manquants).
La première hypothèse fut donc que l’URL était tronquée au delà d’un certain nombre de caractères. Sauf que le problème, c’est que d’une page à l’autre, la longueur de l’URL était différente mais surtout, que l’endroit où l’on perdait le premier paramètre n’était pas le même, donc ce ne pouvait pas être un tronquage de l’URL.
Plugin Jquery Tablesorter : Trier sur un numéro de téléphone

Par défaut, le plugin tablesorter jquery ne gère pas bien le tri sur une colonne contenant des numéros de téléphone. La raison ? C’est parce que le plugin détecte le numéro comme une chaine de texte, du coup le tri ne se fait pas correctement. On peut bien essayer de préciser lors de l’initialisation qu’il faudra trier cette colonne comme un numérique, le tri ne fonctionnera pas mieux, tout simplement car généralement un numéro de téléphone contient des caractères alphanumériques tels que « . » ou « - », du coup le tri ne se fait que sur les 2 premiers chiffre du numéro.
J’ai donc créé un nouveau parseur pour gérer le tri sur mes numéros de téléphone. La méthode est très simple, je supprime tous les caractères non numérique lors du tri et effectue ainsi un tri purement numérique.
$.tablesorter.addParser({ // set a unique id id: 'phoneNumber', is: function(s) { // return false so this parser is not auto detected return false; }, format: function(s) { return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9]/g),"")); }, // set type, either numeric or text type: 'numeric' });
Flightradar24 : Carte du monde des vols d’avions en temps réel

Ce soir je suis tombé sur un site un peu insolite mais qui peut s’avérer utile pour ceux qui voyagent beaucoup ,qui ont de la famille qui voyage beaucoup ou tout simplement pour les curieux ou passionnés d’aviation.
C’est donc une carte du monde avec en direct le trafic aérien mondial. Il est possible de cliquer sur un avion et ainsi de voir sa fiche détaillé, comprenant, entre autres, une photo de l’avion, sa vitesse, sa destination, sa ville de départ, son altitude, sa position et plein d’autres choses. Il est aussi possible de rechercher directement un avion à partir de son numéro.
Bien entendu, tous les avions ne sont pas répertoriés, pour l’instant seuls les avions possédant un transpondeur ADS-B le sont, et l’Europe semble être mieux représentée que les Etats Unis pour le moment.
L’application est aussi disponible sur l’App Store et Android market (en version gratuite et en version payante).
Joyeux anniversaire ! …

… en retard.
Bah oui, voici un an qu’Appo et moi-même vous relayons quelques tuyaux et infos que nous pensons utiles à tout le monde.
Et aussi, bonne année à vous tous (oui, j’ai encore le droit pendant 3h30) !
Petit bilan de l’année passée.
Lire la suite
Mettre à jour Eclipse (Helios -> Indigo)

Petit tuto rapide suite à la mise à jour d’Eclipse à laquelle je viens de procéder sur mon poste. Lire la suite
Gaggle : Google m’a tuer

Petite pause détente du soir en s’amusant avec l’autocompléteur de google.
Ca se passe ici
J’aime bien celle qui commence par « le café c’est » , « au pire » ou encore les fameuses questions existentielles « pourquoi… »
Zend Framework : Aide de vue pour afficher les données issues d’un flux RSS
Voici une aide de vue Zend Framework qui vous permettra de lire les données provenant d’un flux RSS.
Pour cela nous allons utiliser la classe Zend_Feed_Reader
Voilà donc votre helper Rss.php situé dans votre dossier views/helpers/
<?php class View_Helper_Rss extends Zend_View_Helper_Abstract { public function rss($url) { $reader = new Zend_Feed_Reader(); //Si vous avez besoin de passer par un proxy $config = array('proxy_host'=>'localhost','proxy_port'=>8080, 'proxy_user'=>'user', 'proxy_password'=>'password'); $adapter = new Zend_Http_Client_Adapter_Proxy(); $adapter->setConfig($config); $reader->getHttpClient()->setAdapter($adapter); try { $feed = $reader->import($url); $data = array( 'title' => $feed->getTitle(), 'link' => $feed->getLink(), 'dateModified' => $feed->getDateModified(), 'description' => $feed->getDescription(), 'language' => $feed->getLanguage(), 'entries' => array(), ); foreach ($feed as $entry) { $edata = array( 'title' => $entry->getTitle(), 'description' => $entry->getDescription(), 'dateModified' => $entry->getDateModified(), 'authors' => $entry->getAuthors(), 'link' => $entry->getLink(), 'content' => $entry->getContent() ); $data['entries'][] = $edata; } return $data['entries']; } catch (Zend_Exception $e) { throw new Zend_Exception('Impossible de récupérer le flux RSS'); } } }
Ensuite dans votre vue vous l’appelez avec en paramètre l’url du flux RSS à charger.
<?php //On va récupérer le flux rss du site du zéro par exemple $urlRss = 'http://www.siteduzero.com/Templates/xml/tutoriels_fr.xml'; try { $actusRss = $this->rss($urlRss); } catch(Zend_Exception $e){ echo $e->getMessage(); } ?> <?php //Ensuite vous parcourez vos résultats avec un partialLoop par exemple echo $this->partialLoop('front-commun/actuRss.phtml', $actusRss); ?>
Zend Framework : Aide d’action pour télécharger un fichier

Aujourd’hui nous allons voir comment réaliser une aide d’action (helper) en Zend Framework qui vous permettra le téléchargement direct d’un fichier (par défaut, un lien vers un fichier ouvrira le fichier dans le navigateur).
Pour cela nous allons créer un fichier Download.php dans votre dossier controllers/helpers
< ?php class Controller_Helper_Download extends Zend_Controller_Action_Helper_Abstract { /** * * Enter description here ... */ public function direct($dossier,$filename) { return $this->download($dossier,$filename); } public function download($dossier,$filename) { $filepath = $dossier.DS.$filename; $filesize = filesize($filepath); $filemd5 = md5_file($filepath); // Gestion du cache header('Pragma: public'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0'); // Informations sur le contenu à envoyer // header('Content-Tranfer-Encoding: ' . $type . "\n"); header('Content-Length: ' . $filesize); header('Content-MD5: ' . base64_encode($filemd5)); header('Content-Type: application/force-download; name="' . $filename . '"'); header('Content-Disposition: attachement; filename="' . $filename . '"'); // Informations sur la réponse HTTP elle-même header('Date: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT'); header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 1) . ' GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT'); readfile($filepath); exit; } }
Edito
Mémorandom est le blog de 2 développeurs web, Appo et Nico.
Vous y trouverez des informations sur différents domaines touchant de près ou de loin au développement web
Tutoriels Yii Framework
Nos derniers articles
- Trier la colonne d’un tableau sans prendre en compte la casse et les accents
- Des slides qui ont de la gueule, avec impress.js !
- Limite du nombre de paramètres GET
- Plugin Jquery Tablesorter : Trier sur un numéro de téléphone
- Flightradar24 : Carte du monde des vols d’avions en temps réel
- Joyeux anniversaire ! …
- Mettre à jour Eclipse (Helios -> Indigo)
- Gaggle : Google m’a tuer
- Zend Framework : Aide de vue pour afficher les données issues d’un flux RSS
- Zend Framework : Aide d’action pour télécharger un fichier
- jQuery – récupérer la valeur de border-color
- Connaitre les évènements attribués sur un élément JQuery
- MySQL : Comment effectuer un toggle sur un champ ?
- La fonction PHP extract() ou comment extraire John Butler.
- Tri de tableaux et danse folklorique
Blogs Dev
Liens
- Doc subclipse
- Doc Subversion
- Documentation officielle Ez Publish
- Documentation officielle JQuery
- Documentation officielle PHP

