Hallo,

Ik gebruik onderstaande voorbeeld array op meerdere locaties in mijn script.
Op 1 locatie wil ik iets toevoegen en wil daarvoor een foreach gebruiken.


$array = array(
  "form_name" => "Naam",
  "form_email" => "E-mail",
  "form_subject"=> "Onderwerp"
); 

foreach($array as $key => $value) { 
  $output = 'Label: ' . $value; 
}; 
echo $output;


Dit echoot alleen de laatste waarde "Label: Onderwerp" uit.

Hoe echo ik overige waarden?

Ik dacht zelf:

echo $output['form_name'];


Maar helaas werkt dit niet.

Guido
>> Dit echoot alleen de laatste waarde "Label: Onderwerp" uit.

Ik heb de discussie niet gevolgd en misschien heeft iemand dit al uitgelegd, maar in je for-each loop overschrijf je keer op keer de waarde van $output. Uiteindelijk zie je om die reden alleen de laatst overschreven waarde.

Probeer voor de grap in plaats van deze regel in jouw code:

$output = 'Label: ' . $value;

maar eens deze regel ...

$output .= 'Label: ' . $value . '<br>';

Let op de . voor het = teken. In plaats van dat je de waarde nu overschrijft, vul je hem aan.
Daar wijst @Ariën ons al op in de eerste reactie, zij het met minder woorden :).

Je kunt alles wel aan elkaar rijgen in een nieuwe variabele, maar waarom zou je dit doen, je kunt ook meteen de value weergeven, hier hoef je niet eens een nieuwe variabele voor te introduceren. En de vraag is ook waarom dit gedaan wordt, mogelijk voor debugging?

Los daarvan, wat hierboven allemaal gebeurt is waarschijnlijk al een verkeerde insteek voor dat specifieke probleem. En dan doet WordPress nog allerlei vage dingen :/.
@Thomas

Zoals ik al zei heb ik de discussie niet gelezen. Wilde alleen even uitleggen wat er gebeurt ... en hoe hij wel alle output in een variabele kan stoppen. Puur ter lering ende vermaak :-) ... en dus niet met de insteek om te bepalen of dat een goede oplossing is.

Soms is het ook leuk om mensen te motiveren en ze (wellicht) een Eureka-momentje te bezorgen :)
Hoi,

Zo is het inderdaad wel. Ook al werk ik al jaren met PHP, ik krijg het maar niet goed onder de knie. Dus een simpele uitleg is meestal gewenst. Die heb ik nu. Natuurlijk ben ik vóór mijn bericht hier eerst zelf al op zoek gegaan naar een antwoord op mijn vraag, maar die nergens gevonden. En soms denk je het op een bepaalde manier goed te doen en moet je er door een ander op gewezen worden dat je juist niet goed bezig bent ;-) Zoals in dit geval.

Bedankt weer!

Guido
Ik zou eerder output buffering gebruiken dan alles concateneren in een string (en de uitvoer na afloop opslaan in een variabele). Dan kun je namelijk gewoon in en uit PHP blokken te springen zonder je druk te maken om quotes om strings, die de leesbaarheid alleen maar belemmeren. Eigenlijk op precies dezelfde wijze als wanneer je de informatie rechtstreeks zou weergeven op het scherm.

<?php
ob_start(); // start output buffering
    foreach ($array as $value) {
        // misschien hier ook nog wat output escaping op $value toepassen als je dit in een HTML context gebruikt
        ?>Label: <?php echo $value; ?><br><?php
        echo "\n"; // voor leesbaarheid
    }
$output = ob_get_clean();
?>


Uiteraard is de meerwaarde bij zo'n klein snippet nou niet bepaald groot.

En omdat dit waarschijnlijk debugging betrof, is het misschien beter om hier wat functies voor te introduceren zodat dit herbruikbaar is, in plaats van elke keer dezelfde code te kloppen om een array te dumpen.

<?php
// shorhand voor escaping in HTML-context
function escape($in) {
    return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}

// voor veilige dump van data (arrays, strings, whatever) in de HTML-context
function dump($in) {
    if (is_array($in)) {
        $in = print_r($in, true);
    }
    echo '<pre>'.escape($in).'</pre>';
}
?>

Dan kun je simpelweg volstaan met:
<?php
dump($array);
?>

Reageren