PROJET AUTOBLOG


le hollandais volant links

Site original : le hollandais volant links

⇐ retour index

Note PHP, encore une optimisation à la con

dimanche 26 septembre 2021 à 18:15

Je suis en train de refaire des optimisations en tout genre dans un script.

L’une concerne un tableau associatif qui liste les #tags associés à mes posts.
Donc je récupère ça de la BDD, concatène tout, explode() et j’ai un tableau.
Je trie le tableau avec ksort(), puis compte les occurrences de chaque valeur dans le tableau (avec array_count_values), pour avoir un tableau associatif :

(
    #tag1 => nombre_d'occurences1,
    #tag2 => nombre_d'occurences1,
    …
)

Ça me prend 50-70 ms.
J’ai pu réduire ça à 30-50 ms très facilement

En fait, j’ai simplement inversé les étapes ksort() et array_count_values().

Avant :

$tableau = …
ksort($tableau);
$tableau = array_count_values($tableau);

Après :

$tableau = …
$tableau = array_count_values($tableau);
ksort($tableau);

Pourquoi c’est plus rapide ?
Parce qu’au début, le tableau contient tous les #tags, y compris les doublons : il y a 10 000 environ. Trier ça prend du temps.

Mais après le array_count_values(), le tableau est dédoublonné et ne compte que 400 entrées. Trier ça prend moins de temps.

Il suffit qu’il y ait 4 ou 5 optimisations comme ça et on gagne 200 ms sur la page. C’est bête hein, mais ça marche.

Je ne sais pas si on apprend ça à l’école (j’ai jamais eu de prog à l’école), mais une règle :

Sur les tableaux, faire le tri après les filtres.

(PS : oui, beaucoup de posts de prog() en ce moment. Pas désolé du tout par contre :p)


— (permalink)

PHP: hrtime - Manual

dimanche 26 septembre 2021 à 18:08

— microtime() retourne un temps précis à la microseconde.
— hrtime() c’est à la nanoseconde (« high resolution time »).

C’est recommandé pour faire des tests de performances.

À noter que hrtime() ne retourne pas un timestamp plus précis, mais un instant « t » compté depuis une origine arbitraire donné par le système.
Le but est de mesurer des durées, pas de donner l’heure. On l’utilise donc deux fois et on calcule la différence, pour trouver le temps mis entre les deux (temps de faire une procédure PHP par exemple).


— (permalink)

A sign that gets my full support : /r/funny

dimanche 26 septembre 2021 à 15:42

+1

Via https://thelanguagenerds.com/2021/40-clever-signs-that-are-hilarious/


— (permalink)

Ils disent NON au pass sanitaire ! - Broute - CANAL+ - YouTube

dimanche 26 septembre 2021 à 14:45
Nous on n’est pas là pour convaincre les gens de ne pas se faire vacciner, hein. Bien au contraire. Pour continuer de manifester, défendre notre liberté et bénéficier de l’immunité collective tout en faisant aucun effort, il faut absolument que les autres aillent se faire vacciner !

Hahaha !

Tellement ça


— (permalink)

What is Your Page Title on a Google Search Engine Results Page? | CSS-Tricks

dimanche 26 septembre 2021 à 14:38

Pour certains résultats Google, le titre des pages n’est pas le contenu de <title>, ni même le premier H1 de la page.

En fait, dans son exemple, le titre affiché par Google n’est pas présent dans le code source de la page.


— (permalink)

franceinfo plus sur Twitter : "🚰 Chez McDonald’s, l'eau présentée comme "microfiltrée" est précisément vendue 2,50 euros les 40cl, soit plus de six euros le litre Comment expliquer un tel prix ? 📺 #franceinfo canal 27… https://t.co/s1IT6EPIm9"

dimanche 26 septembre 2021 à 10:29

2,40 € pour un verre (carton) d'eau soi-disant filtrée.

Déjà : tous les restaurants et cafés facturent l'eau prise en dehors d'un repas, ou au moins peuvent la facturer.

Quant à la loi qui dit que l'eau "ordinaire" prise au cours d'un repas serait incluse dans le prix du repas au même titre que le sel et le pain (arrêté du 8 juin 1967 relatif à l’affichage des prix dans les établissements servant des repas, ‎denrées ou boissons à consommer sur place), elle a été abrogée en 2015.
Donc même au cours d'un repas, on peut tout vous facturer (même si cette pratique n'est pas répandue).

Par contre, le restaurant doit afficher tous ses prix.
Si vous demandez de l'eau ordinaire (du robinet), en précisant bien "ordinaire", et qu'on vous sert effectivement de l'eau ordinaire (donc pas filtrée, ni de l'eau Évian ou autre), s'ils vous la facturent, son prix doit être affiché sur le tableau des prix. Si c'est pas le cas, ce produit ne peut pas être facturé et on peut vous le refuser.

Ensuite un truc que j'aimerais bien voir c'est leur allégation sur le "eau micro-filtrée". Ça veut dire quoi ? On te sert de l'eau distillée ? déminéralisée ?

On est au courant que l'eau "pure" n'est pas bonne pour la santé et est (autrement mais à peu près autant) aussi dangereuse que boire de l'eau de mer ?

Mais je vois bien le truc : leur pub est relativement vague de façon à ne pas avoir à respecter quelque norme que ce soit. En pratique, je suis à peu près certain qu'une analyse de leur eau "filtrée" n'aurait aucune différence avec l'eau de leur robinet (par exemple celui dans leur WC, vu qu'ils refuseront de servir de l'eau réellement du robinet. Sans compter qu'avec les gobelets et les pailles en carton comme c'est désormais le cas partout, le filtrage me semble particulièrement inutile.

Enfin : si vous voulez manger et boire correctement, je ne peux que vous conseiller d'aller ailleurs qu'au McDo, BK ou autre (mais ce n'est qu'un conseil évidemment)


— (permalink)

(PS5) RIDE 4 in FIRST PERSON is INSANE | Ultra High Realistic Graphics [4K HDR 60fps] - YouTube

samedi 25 septembre 2021 à 16:32

Un jeu vidéo de moto. Oui c’est bien un JEU VIDÉO, pas une vidéo.

Il manque certains détails tout de même :
— les éclaboussures de l’eau : sur route trempée, ça fait pas ça.
— les mouvements de la tête / caméra ne sont pas réalistes


— (permalink)

Pollution de l'air: les particules automobiles hors échappement prennent le dessus

samedi 25 septembre 2021 à 13:44
« En l'absence de politiques ciblées pour réduire les émissions autres que les gaz d'échappement, les préférences des consommateurs pour une plus grande autonomie et une plus grande taille de véhicule pourraient donc entraîner une augmentation des émissions de particules dans les années à venir avec l'adoption de véhicules électriques plus lourds », avertit l'étude.

… et en l’absence de sensibilisation à la conduite électrique, notamment en matière de freinage régénératif.

Les sources de particules (hors échappement) dont parle d’article sont :
— les plaquettes et disques de frein
— l’embrayage
— les pneus

Pour les plaquettes et les disques : si on utilise le freinage regén, ils ne sont pas utilisés.

Pour l’embrayage, la vaste majorité des EV n’ont pas d’embrayage ni de boîte de vitesse (en tout cas pas à friction). Ce n’est pas nécessaire sur ces voitures car le moteur électrique peut tourner à 1 rpm comme à 15 000 rpm. Donc pas besoin de changer de rapport. Le couple est directement contrôlé par le courant électrique injecté dans les circuits.
Mieux, les moteurs à induction (la Zoé ou les premières Tesla) ont tendance à se placer automatique au couple nécessaire : si le rotor se décale par rapport au stator, le couple augmente pour rattraper le retard. C’est un phénomène purement magnétique, mais ça marche. Pour les autres types de moteur (à aimants) des technologies différentes (Toyota, Tesla, avec leur moteur IPM-SynRM) permettent d’obtenir le même phénomène.

Il reste l’usure des pneus.

Mais quand je lis ça :

Parallèlement, les effets des véhicules électriques sont contrastés : ils émettent globalement 5 à 19 % moins de particules hors échappement que les véhicules classiques, mais les véhicules électriques « lourds » émettent 3 à 8 % de particules hors échappement de plus que leur équivalent thermique.

je vois
– 1) que les émissions sont potentiellement plus basses tout de même si l’on regarde la moyenne de la fourchette (reste à voir la médiane).
— 2) que le surplus dans un des indicateurs concerne donc les pneus.
– 3) a priori ce sont donc des particules non-métalliques. Or ce sont ces particules là qu’ils disent eux-même être les plus dangereuses..

J’aimerais tout de même voir la source initiale et la méthode :
— est-ce que les EV sont testé comme une thermique (donc sans freinage régen.)
— est-ce que l’on compare des conduites spor… agressive ou éco ? Sur la conduite agressive, le poids du véhicule est effectivement le plus contributeur à une surémission de particules (usure des pneus++)
— quels types de pneus ? Sur la mienne, où je conduis le plus éco possible, et je pense pouvoir les garder au moins jusqu’à 50 000 km avec ce jeu de pneus là.

Enfin, comme ils le disent : pour les émissions d’échappement, ils prennent les données constructeurs (donc largement sous évalués).

Dans l’ensemble, si les émissions globales sont divisées par 2, mais qu’ensuite on rajoute — soyons gentils — les 8 % max observés, on est toujours à 40 % de particules en moins. Et pas de CO2 ou très peu. Ni de CO. Ni de NOx. Ne de fluides en tout genre.

Bref, j’aimerais juste voir sur les pneus (à combien de kilomètres sont changés les pneus d’une EV par rapport à ceux d’une voiture thermique, moins lourde), mais l’impact des EV me semble tout de même très largement positif sur les particules fines (en plus des émissions sur le CO2 bien-entendu).


— (permalink)

L’armée de l’air cherche une bombe perdue par un avion de chasse entre la Gironde et les Landes - Le Parisien

samedi 25 septembre 2021 à 12:08

Meanwhile, des nouvelles de l'armée de l'air.


— (permalink)

Note : PEBSAW

vendredi 24 septembre 2021 à 15:51

PEBCAK : Problem Exists Between Chair And Keyboard
Littéralement : « Le problème se situe entre la chaise et le clavier », ou, plus subtile : « Il s’agit d’un problème de l’interface chaise-clavier. »

Du coup je propose dans ce cas des chauffards, ceci :
PEBSAW : Problem Exists Between Seat And Wheel
Littéralement : « Le problème se situe entre le siège et le volant », ou « défaillance de l’interface siège-volant »

Quelques exemples d’anomalies courantes :
– défaillance de l’OCR sur la signalétique (numérique ou RGB), entraînant un delta-V dangereux
– allumage intempestif de la sous interface GSM
– mise en veille inopinée par catalyse éthanolique (code C2H5OH)
– monopolisation des ressources asphaltée
– non-respect de la priorisation des autres thread


— (permalink)

Université de Paris sur Twitter : "Bonne nouvelle ! La suite Microsoft Office est gratuite pour tous les étudiants ! Quels sont les applications mises à disposition ? Comment installer la suite Microsoft Office ?On vous explique tout 👉🏻 https://t.co/0eGGcj0iKM… https://t.co/UwiT99uGor"

vendredi 24 septembre 2021 à 15:24

Ça fait toujours plaisir de voir une université publique, financée par nos impôts, partager des logiciels libres :-)
Ou pas, en fait, car faut bien payer les cocktails et autre soirées privées de la direction, donc ça sera publicité gratuite pour Microsoft.

Pas ici. Donc voici une suite bureautique gratuite pour tous, pour jours, qui qui en prime vous emmerdera nettement moins : https://fr.libreoffice.org/

Ainsi qu’un client e-mail (idem) : https://www.thunderbird.net/fr/


— (permalink)

Eye of the Tiger - Survivor (Lullaby Version) The Piano Guys - YouTube

vendredi 24 septembre 2021 à 15:13

— (permalink)

Note : pour l’UI et l’UX : arrêtez de demander, faites !

jeudi 23 septembre 2021 à 18:36

Ça y est, Hyundai vient de mettre à jour son appli Android.

C’est toujours aussi inutile (à part envoyer une adresse au GPS ou gérer la charge à distance), mais au moins c’est joli. Il faut maintenant la même chose sur le système d’infodivertissement de la bagnole (qui tourne toujours avec une interface basée sur Android 4 et qui est horrible à utiliser et moche).

~

Par contre : constamment des popup « voulez-vous mettre à jour ? », « êtes vous-sûr ? », « c’est fait ! Ok/annuler »… Stop. Arrêtez.

Mettez-vous à la place de l’utilisateur moyen : quel utilisateur sain d’esprit va dire « ah non, ne met pas à jour, j’aime avoir des informations obsolètes ! » ?

Personne ne fait ça ! Bien-sûr qu’on veut que l’application affiche les informations à jour de la voiture !
On n’en a rien à faire de voir le pourcentage de batterie que la voiture avait hier soir, ou son kilométrage de ce matin.

Quand j’ouvre mon application, je veux que ça affiche immédiatement l’état actuel de la voiture : kilométrage, carburant restant, position, état du verrouillage… Je t’ai donné mon mot de passe / code pin, voilà, affiche les infos.
Tu te démerdes : mon téléphone, ainsi que la voiture sont connectés 24/7 au réseau. Il faut que ça soit synchronisé 24/7 aussi. C’est le principe d’une application comme celle là.
Toutes les données devraient déjà être dans l’application quand je l’ouvre. C’est ce que fait mon client e-mail. C’est ce que fait Messenger. C’est ce que fait l’appli de la météo. C’est ce que fait l’appli des SMS.

Aucune application ne s’ouvre en posant comme question « voulez-vous mettre à jour vos messages ? vos SMS ? vos e-mails ? la météo ? ».

Au pire, tu mets une option dans les paramètres « mettre à jour en arrière plan : oui / non », pour ceux qui ont du data limité. Mais sinon, tout ça doit être à jour immédiatement (et afficher un message « synchro impossible, dernière synchro le 23/09 à 23h59 » le cas échéant).

~

Ensuite, les gros applat de blanc ou de noir, c’est joli, mais entourez les boutons où vous voulez qu’on clique. Quand je vois un aplat avec un texte et une icône, je clique où ? sur le texte ? sur l’icône ?

Par ailleurs : n’ayez pas peur de mettre la même action à plusieurs endroits, si cette action est pertinente dans plusieurs sections.

L’option « charge programmée » (pour une EV / PHEV) est pertinence dans la section « état du véhicule » et dans la section « gestion à distance ». Mettez là au deux endroits, c’est pas interdit.

Dans l’application « Youtube », par exemple, le bouton pour s’abonner à une chaîne est présente partout : sur la vidéo, sur la page de la chaîne, dans les suggestions… C’est ce qu’il faut.
Sur un navigateur, l’option pour partager une URL se trouve dans le menu de l’onglet, mais aussi quand on clic sur la page. C’est ce qu’il faut.

~

Inversement, quand des options sont indisponibles et le seront toujours, ne les affichez pas !

Dans vos véhicules électriques, on peut gérer la climatisation et le chauffage de la voiture à distance (pratique le matin pour dégivrer par avance). Dans la PHEV, ce n’est pas possible (le chauffage n’est pas électrique mais utilise le moteur thermique — gros manque sur cette voiture).

Dans ce cas, l’option ne devrait même pas être affichée dans l’appli. On ne veut pas la voir !
Sinon l’utilisateur va aller chercher partout où activer ça, en vain.


— (permalink)

Chronologie des médias et exclusivité : Disney menace de sauter la case « salle »

jeudi 23 septembre 2021 à 11:59

Le lobbie de la culture : Pour les films qui sortent au ciné, on va mettre une chronologie pour que tout le monde soit content !
Les cinéma : trop bien !
Les producteurs : j’aime pas.
Les producteurs : on va faire une plateforme et se passer des cinémas !
Les lobbies et les cinémas : https://i.kym-cdn.com/photos/images/original/001/431/201/40f.png

C’est ce qui arrive quand on a un système des années 1960 en place en 2021.

La chronologie des médias c’est cinéma → DVD → télévision.

Sauf qu’aujourd’hui, les cinémas sont vides parce que c’est cher, ça pue et y a le Covid ; plus personne ne veut de DVD car c’est chiant et fragile et y a des spots qui disent t’es considéré comme un criminel ; et plus personne ne regarde de films à la télé car y a trop de pubs et pourquoi se faire chier avec des horaires quand les plateformes de streaming proposent toute à la demande et sans pub ?

Bref :
Quand on est inventif, on adapte le marché à la demande.
Quand on est un vautour à moitié mort, on fait passer des lois pour interdire l’inventivité.


— (permalink)

Ivre, il écrit une fonction qui pèse 100 Mo pour savoir si un nombre est pair | Les Joies du Code - Humour de développeurs : gifs, memes, blagues

mercredi 22 septembre 2021 à 20:18

O_o


— (permalink)

QR Code - Groland - CANAL+ - YouTube

mercredi 22 septembre 2021 à 20:10

Comment sont fait les QR-Code ?


— (permalink)

Yoann Gini sur Twitter : "60% des modèles d’iPhones créées depuis le tout premier iPhone sont supportés par iOS 15 fraîchement sorti.Et il y en a encore pour parler d’obsolescences programmée ?!… https://t.co/HTmqmDp2uf"

mercredi 22 septembre 2021 à 19:02

iOS 15 est supporté jusqu’à iPhones 6S sorti en 2015.
Bon, certaines fonctions ne sont pas dispo sur le matos anciens, mais c’est quand-même pas mal.

Je vous le dis franchement : je songe plus ou moins sérieusement à passer sur iPhone (à terme, pas maintenant).

Pourquoi ?

Parce que les surcouches constructeur chez Android, je ne veux pas car c’est globalement de la merde (ça élimine 80 % des modèles)
Parce que les smartphones de plus de 5,5", je n’en veux plus, c’est beaucoup trop grand (ça élimine 95 % de ce qui reste)
Parce que Google et ses bloatwares c’est quand-même relativement chiant.
Parce que Android ressemble de plus en plus à iOS de toute façon.

Parce que Google a transformé Android en une bouse tout sauf intelligente. Un exemple ? on est en 2021 et Google Play est toujours incapable de télécharger les applications en arrière plan pendant qu’une autre s’installe. Même sous Windows on peut faire ça !

Les seuls problèmes que je vois :
— pas d’autre navigateur que Safari (et un Firefox qui utilise un Webkit bridé, c’est un Safari)
— pas de carte SD
— besoin d’iTunes pour envoyer sa musique dessus
— cher (peut-être pas cher pour ce que c’est, mais ça reste une montagne de fric qui me ferait mal à mettre dans un putain de téléphone).

Après mon Android actuel, c’est soit ça, ça je me passe de téléphone, tout simplement. J’y songe de plus en plus également.


— (permalink)

Tipeee : le plaidoyer de Michael Goldman pour la liberté d’expression

mercredi 22 septembre 2021 à 12:19
Que regrettez-vous… l’émoi ou la petite phrase ?
¿…]
Ce que je voulais dire c’est que du projet le plus polémique au moins polémique, tout ce qui est sur Tipeee est légal. Et qu’à ce titre-là, on les assume tous.

Le cadre fixé sur Tipeee pour accepter les projets, c’est bien celui de la liberté d’expression.
[…]

Vous parliez de la loi française, mais elle interdit justement l’antisémitisme...

[…]

Cette phrase était dans la continuité d’une longue démonstration dans laquelle on expliquait que tout ce qui était illégal était retiré du site. Donc de fait, tout ce qui est xénophobe ou antisémite est retiré du site !

Tout l’antisémitisme qu’on peut opposer aux projets présents sur le site relève de ce que le lecteur ou celui qui regarde juge subjectivement comme tel. Cela n’a toutefois pas de valeur légale ou juridique. […]

(le souligné est de moi).
Et je plussoie ce qui est dit là.

Au final, beaucoup de buzz pour grand chose : sa maladresse aura été de parler à la une chaîne de télé-poubelle.

~

Du coup, sur un site qui refuse de prendre parti, c’est la loi qui tranche, et uniquement elle. Dans ce cas, je vois juste un site qui valorise la liberté d’expression de tous plus que la sensibilité de quelques-uns (à commencer par la leur).

Faut-il rappeler que la loi protège la dignité des personnes, mais elle n’interdit pas les atteintes à la sensibilité ?

Si quelqu’un n’aime pas les brocolis, et que je mange des brocolis devant elle, ben c’est à cette personne d’aller ailleurs, pas à moi d’arrêter de manger.

Or aujourd’hui, c’est bien le contraire qui tend à se faire :
– on interdit aux femmes d’allaiter en public (car ceux qui ont une bible dans le cul trouvent ça choquant, alors qu’eux-même ont probablement été allaités dans des endroits qu’ils n’oseraient même pas imaginer)
– on interdit les voiles parce que ça fait peur (depuis quand la peur est objective et interdite ?)
– on veut interdire le porno en ligne (on remarquera que ce sont toujours les vieux cons qui demandent ça)
– on interdit les signes musul… religieux !
– on veut interdire des albums de Tintin, Astérix ou autre car ça serait offensant (alors que ces albums datent d’une époque dont ces abrutis ont tout oublié de leur passage à l’école)
– idem pour ceux parlent de Voltaire ou Victor Hugo comme des racistes…

Et on fait passer cette censure pour de la protection, et forcément, tout ce qui en sort et qui ne relève que du goût arbitraire de chacun passe pour illégal alors que ça ne l’est pas.

Et tout ça est largement favorisé par ce que font les réseaux sociaux puritains et américains (les patrons à la con dont il parle) : Facebook qui censure des œuvres d’art pourtant classiques et connues de tous car y a un sein ou un bout de fesse, ou même si leur algo foireux détecte ça même où il n’y en a pas.

Twitter, qui bloque des comptes parce qu’il prend au premier degré les paroles d’une chanson un peu trop grossières à son goût…

Bref, tout ça va dans le mauvais sens selon moi.


— (permalink)

Who Invented Zero? | Live Science

mardi 21 septembre 2021 à 20:52

C’est d’ailleurs pour ça que les siècles sont comptés en débutant à 1 et pas à 0.
Ah et J.-C. n’est pas né en l’an 0. Mais en l’an 1.

Y a plusieurs raisons à ça, la plus simple c’est que le « 0 » était inexistant : il n’y a pas de 0 en chiffres romains !

Ensuite, aussi, parce qu’ils n’ont pas décidé de compter les années avec la naissance du Christ. Ils a bien fallu 5 siècles avant que quelqu’un se dise que ça serait pas mal de compter les années.
C’est alors qu’ils ont sorti les bouquins (ie : la Bible) et ont calculé la date de naissance ce J.-C., et sont tombés sur 525.

Ils ont donc antidaté l’année « 1 » et ont décrété que l’année courante était l’an 525. La naissance exact de J.-C. a été placée en fin d’année pour éclipser des fêtes païennes déjà existantes, et ainsi profiter d’une période déjà festive.

Donc si l’on voit quelque part, sur une pièce de monnaie ou sur un tableau qu’il est daté de l’an 200 après J.-C., alors c’est un fake : à l’époque on ne comptait pas encore les années. Et si vous trouvez une pièce d’or datée de « 20 avant J.-C. », c’est encore pire :-D.

Bref, tout ceci a aussi posé de gros problèmes pour la date des fêtes ecclésiastiques, qu’il a fallu recalculer. Sans compter les décalages Solaires/Lunaires entre l’an 1 placé rétrospectivement, et l’année 525, puis entre 525 et 1582 (date du changement de calendrier), puis entre 1582 et la date actuelle.

C’est pour ça que le calcul de la date de Pâques (qui tient compte de la Lune, le Soleil, la Terre, et du calendrier arbitraire à 7 jours, et du décalage de 1582) est bardé d’un si grand nombre de constantes.

Mais j’ai tout déchiffré (non sans mal : j’ai dû mettre un mois à tout comprendre clairement et à écrire l’article).

Via : https://sebsauvage.net/links/?oRKoBQ

~

Sur le sujet du « 0 », je vous conseille un livre : Zero, the Biography of a Dangerous Idea, de Charles Seife.

~

(Ah et contre le fait de forcer à compter en chiffre romains, surtout pas : https://www.lefigaro.fr/culture/italie-la-presse-s-insurge-contre-l-abandon-des-chiffres-romains-par-carnavalet-20210317
Les gens sont devenus trop cons, donc ils veulent au contraire simplifier tout ça au maximum, donc en tirant le niveau par le bas plutôt que tirer le monde vers le haut en enseignant ça…)


— (permalink)

PDO Fetch Modes - Treating PHP Delusions

mardi 21 septembre 2021 à 19:55

C’est vraiment génial ça :-D

(oui je découvre des choses :p)

Normalement, en PDO, un fetchAll() retourne un objet, ou, dans mon cas, un tableau. Chaque élément du tableau est lui-même un tableau contenant les colonnes de la BDD. :

$bdd->query("SELECT id, nom, prenom FROM table")->fetchAll(PDO::FETCH_ASSOC);
array(
  [0] => Array
        (
            [id] => 184e34da69fe1a6b2337be58388dd3b9
            [nom] => dupond
            [prenom] => jean
        )

  [1] => Array
        (
            [id] => 53957652a3c1f9b6790717888fea0a31
            [nom] => ofgates
            [prenom] => john
        )
)

Notez que j’ai utilisé PDO::FETCH_ASSOC qui permet d’avoir un tableau associatif "colonne => valeur". Si on ne le met pas, on aura un index de la colonne, en plus d’un assoc :

  [1] => Array
        (
            [0] => 53957652a3c1f9b6790717888fea0a31
            [id] => 53957652a3c1f9b6790717888fea0a31
            [1] => ofgates
            [nom] => ofgates
            [2] => john
            [prenom] => john
        )

Ça peut servir si l’on fait des ittérations numériques sur les index, mais dans mon cas, j’utilise toujours les noms des colonnes.

Maintenant, problème : dans le tableau de tous les résultats obtenu avec fetchAll(), on a un index : 0, 1, mis en évidence là :

  [0] => Array
        (
            …
        )

  [1] => Array
        (
           … 
        )

Moi j’ai besoin que ces 0 et 1 soient remplacés par l’ID de l’élément du tableau.
Je sais que dans ma BDD, l’ID, qui n’est autre qu’un MD5() ou un GUID, est unique.

Je peux utiliser l’option PDO::FETCH_UNIQUE :

$bdd->query("SELECT id, nom, prenom FROM table")->fetchAll(PDO::FETCH_UNIQUE);

Cela va utiliser le contenu de la première colonne ("id") comme index du tableau retourné par fetchAll() :

array(
  [184e34da69fe1a6b2337be58388dd3b9] => Array
        (
            [0] => 184e34da69fe1a6b2337be58388dd3b9
            [id] => 184e34da69fe1a6b2337be58388dd3b9
            [1] => dupond
            [nom] => dupond
            [2] => jean
            [prenom] => jean
        )

  [53957652a3c1f9b6790717888fea0a31] => Array
        (
            [0] => 53957652a3c1f9b6790717888fea0a31
            [id] => 53957652a3c1f9b6790717888fea0a31
            [1] => ofgates
            [nom] => ofgates
            [2] => john
            [prenom] => john
        )
)

Ça marche, mais ça remis les données redondantes.
Heureusement, on peut mettre les deux options :

$bdd->query("SELECT id, nom, prenom FROM table")->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);

Et là, j’ai ce que je veux :

array(
  [184e34da69fe1a6b2337be58388dd3b9] => Array
        (
            [id] => 184e34da69fe1a6b2337be58388dd3b9
            [nom] => dupond
            [prenom] => jean
        )

  [53957652a3c1f9b6790717888fea0a31] => Array
        (
            [id] => 53957652a3c1f9b6790717888fea0a31
            [nom] => ofgates
            [prenom] => john
        )
)

Attention :
— il existe un grand nombre d’options PDO. Ici, j’en ai deux qui sont compatibles entre-elles. Toutes ne le sont pas.
— FETCH_UNIQUE va faire en sorte que les éléments de l’index du tableau seront unique (c’est obligé, pour un tableau). Ici ça ne poste pas de problème car l’ID est un hash unique (je déclare cette colonne comme UNIQUE quand je construit la BDD, par exemple). Si votre "id" n’est pas unique, les derniers écraseront les premiers.
— FETCH_UNIQUE utilise la première colonne demandé dans la requête. Ici, c’est mon "id". Si j’avais voulu utiliser "nom", j’aurais dû utiliser cette requête :

$bdd->query("SELECT nom, id, prenom FROM table")->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);

Ici, la première colonne est "nom", et "id" vient en second, suivi de "prenom".

Bien-sûr, si l’utilise le « * », on peut faire ça :

$bdd->query("SELECT nom, * FROM table")->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);

Pour forcer d’avoir "nom" en premier, même si ce n’est pas la colonne en première dans la liste des colonnes de la BDD.

J’arrête là pour les exemples, ça me suffit.
Je vous laisse voir les différents modes. Le "FETCH_KEY_PAIR" peut-être utile parfois aussi.


— (permalink)