Page 1 sur 1

Petit exercice PHP

Posté : 12 mars 2021, 22:26
par two3d
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:

Re: Petit exercice PHP

Posté : 12 mars 2021, 22:38
par or 1
$tab = [1,2,3];

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

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

Re: Petit exercice PHP

Posté : 12 mars 2021, 23:20
par two3d
Bien tenté mais l'affichage des numéros n'est pas dans le echo!

Et... le foreach à disparu :non:

Re: Petit exercice PHP

Posté : 13 mars 2021, 14:30
par @rthur
Moi je ferrai une fonction qui contient le foreach, et le echo de cette fonction.

Re: Petit exercice PHP

Posté : 13 mars 2021, 15:11
par two3d
Tu peux développer stp ?

Re: Petit exercice PHP

Posté : 13 mars 2021, 20:56
par Saian
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()}";

Re: Petit exercice PHP

Posté : 13 mars 2021, 22:36
par two3d
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>

Re: Petit exercice PHP

Posté : 13 mars 2021, 22:50
par two3d
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:

Re: Petit exercice PHP

Posté : 16 mars 2021, 00:52
par Saian
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>';
}

Re: Petit exercice PHP

Posté : 16 mars 2021, 10:32
par two3d
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]);

Re: Petit exercice PHP

Posté : 16 mars 2021, 11:39
par Saian
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. ;)

Re: Petit exercice PHP

Posté : 16 mars 2021, 12:42
par two3d
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: