array_reduce

1
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.

ExempleSomme des nombres du tableau

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = array_reduce(
5
    $listeNombres,
6
    function ($somme, $nombre) {
7
        return $somme + $nombre;
8
    },
9
    0
10
);
11
12
var_dump($somme); // 92

Équivalent avec fonction fléchée

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = array_reduce($listeNombres, fn ($somme, $nombre) => $somme + $nombre, 0);
5
6
var_dump($somme); // 92

Équivalent avec foreach

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = 0;
5
6
foreach ($listeNombres as $nombre) {
7
    $somme = $somme + $nombre;
8
}
9
10
var_dump($somme);

Équivalent avec for

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = 0;
5
6
for ($i = 0; $i < count($listeNombres); $i++) {
7
    $somme = $somme + $listeNombres[$i];
8
}
9
10
var_dump($somme);

Équivalent avec array_sum

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = array_sum($listeNombres);
5
6
var_dump($somme);

ExempleSomme des nombres impairs

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = array_reduce(
5
    $listeNombres,
6
    function ($somme, $nombre) {
7
        if ($nombre % 2 == 1) {
8
            return $somme + $nombre;
9
        } else {
10
            return $somme;
11
        }
12
    },
13
    0
14
);
15
var_dump($somme); // 56

Simplification avec un ternaire :

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = array_reduce(
5
    $listeNombres,
6
    function ($somme, $nombre) {
7
        return ($nombre % 2 == 1) ? $somme + $nombre : $somme;
8
    },
9
    0
10
);
11
var_dump($somme);

Simplification cas particulier :

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = array_reduce(
5
    $listeNombres,
6
    function ($somme, $nombre) {
7
        return ($nombre % 2) ? $somme + $nombre : $somme;
8
    },
9
    0
10
);
11
var_dump($somme);

Équivalent avec fonction fléchée

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = array_reduce($listeNombres, fn ($somme, $nombre) => ($nombre % 2) ? $somme + $nombre : $somme, 0);
5
var_dump($somme);

Équivalent avec foreach

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = 0;
5
6
foreach ($listeNombres as $nombre) {
7
    if ($nombre % 2) $somme =  $somme + $nombre;
8
}
9
10
var_dump($tab1);

Équivalent avec for

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = 0;
5
6
for ($i = 0; $i < count($listeNombres); $i++) {
7
    if ($listeNombres[$i] % 2) $somme =  $somme + $listeNombres[$i];
8
}
9
10
var_dump($somme);

Équivalent avec array_filter et array_sum

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = array_sum(array_filter($listeNombres, function ($nb) {return $nb % 2;}));
5
6
var_dump($somme);

Équivalent avec fonction fléchée

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$somme = array_sum(array_filter($listeNombres, fn ($nb) => $nb % 2));
5
6
var_dump($somme);

ExempleCombien de nombres pairs

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$cpt = array_reduce(
5
    $listeNombres,
6
    function ($cpt, $nombre) {
7
        if (!($nombre % 2)) {
8
            return $cpt + 1;
9
        } else {
10
            return $cpt;
11
        }
12
    },
13
    0
14
);
15
16
var_dump($cpt); // 4

Équivalent avec un ternaire

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$cpt = array_reduce(
5
    $listeNombres,
6
    function ($cpt, $nombre) {
7
        return !($nombre % 2) ? $cpt + 1 : $cpt;        
8
    },
9
    0
10
);
11
12
var_dump($cpt); // 4

Équivalent avec fonction fléchée

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$cpt = array_reduce($listeNombres, fn ($cpt, $nombre) => !($nombre % 2) ? $cpt + 1 : $cpt, 0);
5
6
var_dump($cpt); // 4

Avec array_filter et count : 0n compte le nombre d' impairs.

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$cpt = count(array_filter($listeNombres, function ($nb) { return !($nb % 2);}));
5
6
var_dump($cpt);

Équivalent avec fonction fléchée

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$cpt = count(array_filter($listeNombres, fn ($nb) => !($nb % 2)));
5
6
var_dump($cpt);

Équivalent avec foreach

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$cpt = 0;
5
6
foreach ($listeNombres as $nombre) {
7
    if (!($nombre % 2)) $cpt =  $cpt + 1;
8
}
9
10
var_dump($cpt);

Équivalent avec for

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$cpt = 0;
5
6
for ($i = 0; $i < count($listeNombres); $i++) {
7
    if (!($listeNombres[$i] % 2)) $cpt =  $cpt + 1;
8
}
9
10
var_dump($cpt);

ExempleY-a-t-il des nombres pairs

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$app = array_reduce(
5
    $listeNombres,
6
    function ($app, $nombre) {
7
        if ($nombre % 2) {
8
            return true;
9
        } else {
10
            return $app;
11
        }
12
    },
13
    false
14
);
15
var_dump($app); // true

Équivalent avec fonction fléchée

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$app = array_reduce($listeNombres, fn ($app, $nombre) => ($nombre % 2) ? true : $app, false);
5
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.

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$app = count(array_filter($listeNombres, function ($nb) { return !($nb % 2);})) != 0;
5
var_dump($app);

Équivalent avec fonction fléchée

1
<?php
2
$listeNombres = [5, 12, 7, 9, 3, 17, 8, 2, 15, 14];
3
4
$app = count(array_filter($listeNombres, fn ($nb) => !($nb % 2))) != 0;
5
var_dump($app);

Équivalent avec foreach

1
<?php
2
$app = false;
3
foreach ($listeNombres as $nombre) {
4
    if ($nombre % 2) $app = true;
5
}
6
7
var_dump($app);

Équivalent avec for

1
<?php
2
$app = false;
3
for ($i = 0; $i < count($listeNombres); $i++) {
4
    if ($listeNombres[$i] % 2) $app = true;
5
}
6
7
var_dump($app);

ExempleSomme des longueurs des mots

1
<?php
2
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
3
4
$somme = array_reduce(
5
    $listeMots,
6
    function ($somme, $mot) {
7
        return $somme + mb_strlen($mot);
8
    },
9
    0
10
);
11
12
var_dump($somme); // 43

Équivalent avec fonction fléchée

1
<?php
2
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
3
4
$somme = array_reduce($listeMots, fn ($somme, $mot) => $somme + mb_strlen($mot), 0);
5
6
var_dump($somme); // 43

Équivalent avec array_map et array_sum

1
<?php
2
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
3
4
$somme = array_sum(array_map(function ($mot) {return mb_strlen($mot);}, $listeMots));
5
6
var_dump($somme); // 43

Équivalent avec fonction fléchée

1
<?php
2
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
3
4
$somme = array_sum(array_map(fn ($mot) => mb_strlen($mot), $listeMots));
5
6
var_dump($somme); // 43

Équivalent avec foreach

1
<?php
2
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
3
4
$somme = 0;
5
6
foreach ($listeMots as $mot) {
7
    $somme = $somme + mb_strlen($mot);
8
}
9
10
var_dump($somme);

Équivalent avec for

1
<?php
2
$listeMots = ['bonjour', 'hello', 'matin', 'soir', 'journée', 'maintenant', 'après'];
3
4
$somme = 0;
5
6
for ($i = 0; $i < count($listeMots); $i++) {
7
    $somme = $somme + mb_strlen($listeMots[$i]);
8
}
9
10
var_dump($somme);

ExempleNombre de majeurs d'une liste de tableaux associatifs

1
<?php
2
$listePersonnes = [
3
    ['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
4
    ['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
5
    ['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
6
    ['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
7
];
8
9
$cpt = array_reduce(
10
    $listePersonnes,
11
    function ($cpt, $personne) {
12
        return ($personne['age'] >= 18) ? ++$cpt : $cpt; // attention ++$cpt et non $cpt++;        
13
    },
14
    0
15
);
16
17
var_dump($cpt);

Équivalent avec fonction fléchée

1
<?php
2
$listePersonnes = [
3
    ['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
4
    ['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
5
    ['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
6
    ['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
7
];
8
9
$cpt = array_reduce($listePersonnes, fn ($cpt, $personne) => ($personne['age'] >= 18) ? ++$cpt : $cpt, 0);
10
11
var_dump($cpt);

Équivalent avec count et array_filter :

1
<?php
2
$listePersonnes = [
3
    ['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
4
    ['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
5
    ['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
6
    ['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
7
];
8
9
$cpt = count(array_filter($listePersonnes, function ($p) {return $p['age'] >= 18;}));
10
11
var_dump($cpt);

Équivalent avec fonction fléchée

1
<?php
2
$listePersonnes = [
3
    ['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
4
    ['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
5
    ['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
6
    ['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
7
];
8
9
$cpt = count(array_filter($listePersonnes, fn ($p) => $p['age'] >= 18));
10
11
var_dump($cpt);

Équivalent avec foreach

1
<?php
2
$listePersonnes = [
3
    ['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
4
    ['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
5
    ['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
6
    ['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
7
];
8
9
$cpt = 0;
10
11
foreach ($listePersonnes as $personne) {
12
    if ($personne['age'] >= 18) $cpt++; // ici il n'y a pas le problème du return, donc $cpt++ ou ++$cpt
13
}
14
15
var_dump($cpt);

Équivalent avec for

1
<?php
2
$listePersonnes = [
3
    ['id' => 8, 'nom' => 'Aule', 'prenom' => 'Lucie', 'age' => 45],
4
    ['id' => 9, 'nom' => 'Ball', 'prenom' => 'Annie', 'age' => 24],
5
    ['id' => 10, 'nom' => 'Bon', 'prenom' => 'Jean', 'age' => 65],
6
    ['id' => 11, 'nom' => 'Braisile', 'prenom' => 'France', 'age' => 13]
7
];
8
9
$cpt = 0;
10
11
for ($i = 0; $i < count($listePersonnes ); $i++) {
12
    if( $listePersonnes[$i]['age'] > 18) $cpt++;
13
}
14
15
var_dump($cpt);