Petit exercice PHP

Mammouth du PHP | 817 Messages

12 mars 2021, 22:26

Petit exercice PHP:

Comment feriez-vous pour insèrer un foreach dans un echo ?

Je schématise le "TP":

Vous avez un echo comme celui-ci:

echo "Bonjour, voilà le contenu du foreach: [placez ici le foreach]";

Et un foreach, comme celui-ci:

foreach([1,2,3] as $num){
    echo "$num, ";
}

Évidement vous seriez tenté de faire comme ceci:

$foreach='';
foreach([1,2,3] as $num){
    $foreach.="$num, ";
}
echo "Bonjour, voilà le contenu du foreach: $foreach";

Mais je vous l'interdit, vous devez trouver une autre solution :D

Vous avez trois heures! :mrgreen:

Mammouth du PHP | 1766 Messages

12 mars 2021, 22:38

$tab = [1,2,3];

function test_print($item)
{
    echo "$item, ";
}

echo "Bonjour, voilà le contenu du foreach: ";
array_walk($tab, 'test_print');

Mammouth du PHP | 817 Messages

12 mars 2021, 23:20

Bien tenté mais l'affichage des numéros n'est pas dans le echo!

Et... le foreach à disparu :non:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8823 Messages

13 mars 2021, 14:30

Moi je ferrai une fonction qui contient le foreach, et le echo de cette fonction.
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 817 Messages

13 mars 2021, 15:11

Tu peux développer stp ?

Avatar du membre
Mammouth du PHP | 1382 Messages

13 mars 2021, 20:56

C'est ok comme ça ?
ob_start();
foreach([1,2,3] as $num){
  echo "$num, ";
}
$foreach = ob_get_contents();
ob_end_clean();
echo "Bonjour, voilà le contenu du foreach: $foreach";

Je peux te proposer ça aussi si tu veux que le foreach s'exécute durant le echo et non avant.
$string_foreach = function () {
  ob_start();
  foreach ([1, 2, 3] as $num) {
    echo "$num, ";
  }
  $content = ob_get_contents();
  ob_end_clean();
  return $content;
};
echo "Bonjour, voilà le contenu du foreach: {$string_foreach()}";
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Mammouth du PHP | 817 Messages

13 mars 2021, 22:36

C'est à celui qui arrivera à faire le plus petit code possible (édition du 1er message).

Saian tu t'es bien débrouillé avec la première fonction et les deux solutions proposées répondent à l'exercice =D>

Mammouth du PHP | 817 Messages

13 mars 2021, 22:50

Bon, bravo et merci à tous de vous être prêter au jeu, tout ça pour dire quand même que l'idée de cet exercice m'est venue lorsque j'avais un foreach à mettre dans un echo (voir détails plus bas), j'ai tenté un "callback" dans le echo mais le echo fait parti des structures qui ne sont pas calables.

Mon problème en détails:

J'affiche des "box" d'erreur/success quand j'ai un message à afficher sur le site, c'est une fonction PHP du genre "box("message..","rouge")" ou "box("message..","vert")" avec une div HTML, du CSS, etc.. là je me retrouve avec la box et le contenu du foreach en dehors cette div, je me posais donc la question si il était techniquement possible d'inclure mon foreach dans ma fonction box() et comment.

Ma fonction:
function box($message,$couleur){
    return '<div class="message-'.$couleur.'">'.$message.'</div>';
}

J'aime bien, quand c'est possible, d'utiliser le moins de code possible pour arriver à faire ce que je veux. :mrgreen:

Avatar du membre
Mammouth du PHP | 1382 Messages

16 mars 2021, 00:52

Pas sur d'avoir bien compris mais pourquoi pas simplement passer un tableau pour le paramètre $message et si $message est un tableau faire la boucle voir même un simple implode ?
function box($message, $couleur) {
    return '<div class="message-'.$couleur.'">'.(!is_array($message) ? $message : implode(', ', $message)).'</div>';
}
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Mammouth du PHP | 817 Messages

16 mars 2021, 10:32

Bingo, dans le mille Émile, bravo à toi et merci aussi =D>

Un simple implode réussi à "insérer un foreach" dans un echo
echo "Bonjour, voilà le contenu du foreach: " . implode(', ', [1,2,3]);

Avatar du membre
Mammouth du PHP | 1382 Messages

16 mars 2021, 11:39

Oui, seulement si ce foreach a pour but de concaténer les éléments du tableau puisque c'est justement à ça que sert cette fonction. :P

Au départ je pensais que tu voulais vraiment le faire dans la chaine, sinon c'est forcément le implode qui vient en premier à l'esprit et je pense pas être le seul. ;)
J'édite souvent mon message après avoir répondu pour le corriger où y apporter des informations complémentaires alors n'hésitez pas à y jeter un nouveau coup d'oeil ^^

Mammouth du PHP | 817 Messages

16 mars 2021, 12:42

Oui, juste implode avec un br HTML, je savais qu'il existait une fonction le faisant mais je ne me rappelais plus laquelle.

La suite au prochain épisode! :mrgreen: