array_reduce
array_reduce($tableau, function($resultat, $elt){...}, $init)
Cette fonction retourne une valeur calculée à partir du retour de la fonction.
La valeur retournée par la fonction est stockée dans $resultat.
$elt : représente un élément du tableau à chaque tour de boucle.
$init : représente la valeur initiale de $resultat.
Exemple : Somme des nombres du tableau
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = array_reduce(
$listeNombres,
function ($somme, $nombre) {
return $somme + $nombre;
},
0
);
var_dump($somme); // 92
Équivalent avec fonction fléchée
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = array_reduce($listeNombres, fn ($somme, $nombre) => $somme + $nombre, 0);
var_dump($somme); // 92
Équivalent avec foreach
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = 0;
foreach ($listeNombres as $nombre) {
$somme = $somme + $nombre;
}
var_dump($somme);
Équivalent avec for
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = 0;
for ($i = 0; $i < count($listeNombres); $i++) {
$somme = $somme + $listeNombres[$i];
}
var_dump($somme);
Équivalent avec array_sum
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = array_sum($listeNombres);
var_dump($somme);
Exemple : Somme des nombres impairs
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = array_reduce(
$listeNombres,
function ($somme, $nombre) {
if ($nombre % 2 == 1) {
return $somme + $nombre;
} else {
return $somme;
}
},
0
);
var_dump($somme); // 56
Simplification avec un ternaire :
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = array_reduce(
$listeNombres,
function ($somme, $nombre) {
return ($nombre % 2 == 1) ? $somme + $nombre : $somme;
},
0
);
var_dump($somme);
Simplification cas particulier :
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = array_reduce(
$listeNombres,
function ($somme, $nombre) {
return ($nombre % 2) ? $somme + $nombre : $somme;
},
0
);
var_dump($somme);
Équivalent avec fonction fléchée
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = array_reduce($listeNombres, fn ($somme, $nombre) => ($nombre % 2) ? $somme + $nombre : $somme, 0);
var_dump($somme);
Équivalent avec foreach
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = 0;
foreach ($listeNombres as $nombre) {
if ($nombre % 2) $somme = $somme + $nombre;
}
var_dump($tab1);
Équivalent avec for
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = 0;
for ($i = 0; $i < count($listeNombres); $i++) {
if ($listeNombres[$i] % 2) $somme = $somme + $listeNombres[$i];
}
var_dump($somme);
Équivalent avec array_filter et array_sum
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = array_sum(array_filter($listeNombres, function ($nb) {return $nb % 2;}));
var_dump($somme);
Équivalent avec fonction fléchée
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$somme = array_sum(array_filter($listeNombres, fn ($nb) => $nb % 2));
var_dump($somme);
Exemple : Combien de nombres pairs
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$cpt = array_reduce(
$listeNombres,
function ($cpt, $nombre) {
if (!($nombre % 2)) {
return $cpt + 1;
} else {
return $cpt;
}
},
0
);
var_dump($cpt); // 4
Équivalent avec un ternaire
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$cpt = array_reduce(
$listeNombres,
function ($cpt, $nombre) {
return !($nombre % 2) ? $cpt + 1 : $cpt;
},
0
);
var_dump($cpt); // 4
Équivalent avec fonction fléchée
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$cpt = array_reduce($listeNombres, fn ($cpt, $nombre) => !($nombre % 2) ? $cpt + 1 : $cpt, 0);
var_dump($cpt); // 4
Avec array_filter et count : 0n compte le nombre d' impairs.
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$cpt = count(array_filter($listeNombres, function ($nb) { return !($nb % 2);}));
var_dump($cpt);
Équivalent avec fonction fléchée
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$cpt = count(array_filter($listeNombres, fn ($nb) => !($nb % 2)));
var_dump($cpt);
Équivalent avec foreach
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$cpt = 0;
foreach ($listeNombres as $nombre) {
if (!($nombre % 2)) $cpt = $cpt + 1;
}
var_dump($cpt);
Équivalent avec for
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$cpt = 0;
for ($i = 0; $i < count($listeNombres); $i++) {
if (!($listeNombres[$i] % 2)) $cpt = $cpt + 1;
}
var_dump($cpt);
Exemple : Y-a-t-il des nombres pairs
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$app = array_reduce(
$listeNombres,
function ($app, $nombre) {
if ($nombre % 2) {
return true;
} else {
return $app;
}
},
false
);
var_dump($app); // true
Équivalent avec fonction fléchée
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$app = array_reduce($listeNombres, fn ($app, $nombre) => ($nombre % 2) ? true : $app, false);
var_dump($app); // true
Équivalent avec array_filter et count : 0n compte le nombre de pairs. C'est vrai si différent de zéro.
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$app = count(array_filter($listeNombres, function ($nb) { return !($nb % 2);})) != 0;
var_dump($app);
Équivalent avec fonction fléchée
<?php
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
$app = count(array_filter($listeNombres, fn ($nb) => !($nb % 2))) != 0;
var_dump($app);
Équivalent avec foreach
<?php
$app = false;
foreach ($listeNombres as $nombre) {
if ($nombre % 2) $app = true;
}
var_dump($app);
Équivalent avec for
<?php
$app = false;
for ($i = 0; $i < count($listeNombres); $i++) {
if ($listeNombres[$i] % 2) $app = true;
}
var_dump($app);
Exemple : Somme des longueurs des mots
<?php
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
$somme = array_reduce(
$listeMots,
function ($somme, $mot) {
return $somme + mb_strlen($mot);
},
0
);
var_dump($somme); // 43
Équivalent avec fonction fléchée
<?php
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
$somme = array_reduce($listeMots, fn ($somme, $mot) => $somme + mb_strlen($mot), 0);
var_dump($somme); // 43
Équivalent avec array_map et array_sum
<?php
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
$somme = array_sum(array_map(function ($mot) {return mb_strlen($mot);}, $listeMots));
var_dump($somme); // 43
Équivalent avec fonction fléchée
<?php
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
$somme = array_sum(array_map(fn ($mot) => mb_strlen($mot), $listeMots));
var_dump($somme); // 43
Équivalent avec foreach
<?php
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
$somme = 0;
foreach ($listeMots as $mot) {
$somme = $somme + mb_strlen($mot);
}
var_dump($somme);
Équivalent avec for
<?php
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
$somme = 0;
for ($i = 0; $i < count($listeMots); $i++) {
$somme = $somme + mb_strlen($listeMots[$i]);
}
var_dump($somme);
Exemple : Nombre de majeurs d'une liste de tableaux associatifs
<?php
$listePersonnes = [
['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
];
$cpt = array_reduce(
$listePersonnes,
function ($cpt, $personne) {
return ($personne['age'] >= 18) ? ++$cpt : $cpt; // attention ++$cpt et non $cpt++;
},
0
);
var_dump($cpt);
Équivalent avec fonction fléchée
<?php
$listePersonnes = [
['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
];
$cpt = array_reduce($listePersonnes, fn ($cpt, $personne) => ($personne['age'] >= 18) ? ++$cpt : $cpt, 0);
var_dump($cpt);
Équivalent avec count et array_filter :
<?php
$listePersonnes = [
['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
];
$cpt = count(array_filter($listePersonnes, function ($p) {return $p['age'] >= 18;}));
var_dump($cpt);
Équivalent avec fonction fléchée
<?php
$listePersonnes = [
['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
];
$cpt = count(array_filter($listePersonnes, fn ($p) => $p['age'] >= 18));
var_dump($cpt);
Équivalent avec foreach
<?php
$listePersonnes = [
['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
];
$cpt = 0;
foreach ($listePersonnes as $personne) {
if ($personne['age'] >= 18) $cpt++; // ici il n'y a pas le problème du return, donc $cpt++ ou ++$cpt
}
var_dump($cpt);
Équivalent avec for
<?php
$listePersonnes = [
['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
];
$cpt = 0;
for ($i = 0; $i < count($listePersonnes ); $i++) {
if( $listePersonnes[$i]['age'] > 18) $cpt++;
}
var_dump($cpt);