[RESOLU] Comparer une valeur de chaque tableau (débutant)

Petit nouveau ! | 3 Messages

22 janv. 2022, 11:15

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.

Mammouth du PHP | 2703 Messages

22 janv. 2022, 15:08

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.

Petit nouveau ! | 3 Messages

22 janv. 2022, 21:41

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

Eléphant du PHP | 53 Messages

24 janv. 2022, 02:18

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+
Pourquoi faire simple quand on peut faire compliqué ?

Petit nouveau ! | 3 Messages

24 janv. 2022, 11:12

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 !