Page 1 sur 1

Comparer une valeur de chaque tableau (débutant)

Posté : 22 janv. 2022, 11:15
par Ncls7522
Bonjour,

Je débute en PHP et j'apprends actuellement en autodidacte.

Je suis encore à l'étape des bases (tableaux, fonctions, boucles etc). Au fur et à mesure que j'avance j'aime bien faire de petits exercices par rapport à ce que je viens d'apprendre.

Seulement ici, ce que j'essaie de faire ne fonctionne pas, je cale dessus depuis un moment et rien y fait.. Je vous explique :

j'ai d'abord créé 2 tableaux et une simple fonction, dont le but est de comparer une des valeurs de chaque tableau ('author'). Et si ces valeurs sont identiques, il faut que la fonction renvoie le nombre de messages ce situant dans le tableau "$users".

Voici le code :
<?php
$recipes = [
    [
        'title' => 'Cassoulet',
        'recipe' => '',
        'author' => 'pierre',
        'is_enabled' => true,
    ],
    [
        'title' => 'Couscous',
        'recipe' => '',
        'author' => 'mickael',
        'is_enabled' => false,
    ],
    [
        'title' => 'Escalope milanaise',
        'recipe' => '',
        'author' => 'mathieu',
        'is_enabled' => true,
    ],
    [
        'title' => 'Salade Romaine',
        'recipe' => '',
        'author' => 'laurene',
        'is_enabled' => false,
    ],
];
$users = [
    [
        'author' => 'pierre',
        'message' => 1000,
    ],
    [
        'author' => 'laurene',
        'message' => 2050,
    ],
    [
        'author' => 'mickael',
        'message' => 4000,
    ],
    [
        'author' => 'louis',
        'message' => 777,
    ],
];


function test(  $x ,  $y) 
 {
for ($i = 0 ; $i < count($y) ; $i++) {
    $variable = $y[$i];
    if ($x === $variable['author']) {
        echo $variable['message'];
     }
   }
}
?>
<?php echo test($recipes['author'] , $users); ?>
Ici, je suis bien conscient que mes tableaux ont eux-mêmes des tableaux, donc pourquoi pas un tenter un "eachfor".. Malheureusement après de multiples essaies rien y fait, que n'arrive pas à avoir le résultat souhaité :(

Si des personnes pourraient m'éclairer, je les remercies énormément ! Je débute, c'est surement un truc tout bête mais bon.

Re: Comparer une valeur de chaque tableau (débutant)

Posté : 22 janv. 2022, 15:08
par or 1
il faut afficher les erreurs, afin d'avoir
Warning : Undefined array key "author" in ... on line 57
soit à la ligne echo test($recipes['author'] , $users);

il faut 2 boucles for ou 2 foreach, pas une seule.

Re: Comparer une valeur de chaque tableau (débutant)

Posté : 22 janv. 2022, 21:41
par Ncls7522
Bonsoir,

je n'ai aucunes erreurs qui s'affichent, j'ai déjà essayé avec des foreach et for mais ça ne fonctionne pas non plus. Je n'arrive pas à trouver la bonne méthode pour parvenir au résultat voulu. J'ai débuté il y a moins d'une semaine et ce n'est pas encore très clair.

Je vais rester sur la piste des 2 boucles for ou foreach, merci pour l'éclaircissement :)

Re: Comparer une valeur de chaque tableau (débutant)

Posté : 24 janv. 2022, 02:18
par j_saisrien
Hello Ncls7522
Tu peux toujours essayer cette fonction:

Code : Tout sélectionner

function test( $x , $y) { for ($i = 0; $i < count($x) ; $i++) { $m = $x[$i]; for ($r = 0; $r < count($y) ; $r++) { $n = $y[$r]; if($m['author'] == $n['author'] ) { echo $m['author'] . " => " . $n['message'] . "<br />"; } } } } echo test($recipes , $users);
a+

Re: Comparer une valeur de chaque tableau (débutant)

Posté : 24 janv. 2022, 11:12
par Ncls7522
Bonjour j'ai trouvé la solution avec ce code :
foreach($users as $keyuser){
foreach($recipes as $keyrecipe){

    if ($keyrecipe['author'] == $keyuser['author']){
            echo $keyuser['message'];
            echo $keyrecipe['author'];}
              
}

    }
et en testant le code que tu as mis j'obtiens le même résultat. Sauf que je n'ai pas utilisé de fonction.

Merci beaucoup d'avoir pris du temps pour ça !