#20396

Who Invented Zero? | Live Science

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…)

https://www.livescience.com/27853-who-invented-zero.html

#20395

PDO Fetch Modes - Treating PHP Delusions

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.

https://phpdelusions.net/pdo/fetch_modes