Beste forummers,

Ik heb het volgende stukje code:

<?php
function splits($prefix,$delimiter,$split) {
$explode = explode($delimiter, $split);
for($i = 0; $i < count($explode); $i++){
return $prefix . $explode[$i] . '<br />';
}
}

$string = 'test1|test2|test3|test4|test5|test6|test7|test8|test9';

echo splits('.','|',$string);

?>

De bedoeling is dat ik het volgende krijg:

.test1
.test2
.test3
.test4
.test5
.test6
.test7
.test8
.test9

Alleen krijg ik als ik return gebruik, alleen .test1 te zien. Als ik echo in de functie zet krijg ik wel het hele rijtje te zien.
Valt dit stukje script zo om te bouwen dat met return alle resultaten te voorschijn komen?

Gr,
Martin
Je kan maar 1 keer returnen.
Wat je doet: je bouwt een string op; op het einde geef je die terug.

<?php
function splits($prefix,$delimiter,$split) {
$result = '';
$explode = explode($delimiter, $split);
for($i = 0; $i < count($explode); $i++){
$result .= $prefix . $explode[$i] . '<br />';
}
return $result;
}
?>
Beste Martin,

Je gebruikt return in een loop. Zodra de return wordt uitgevoerd wordt de functie (splits) verlaten en dus ook de loop. (for)

een tweede opmerking:
Wil je de woorden echt onder elkaar hebben dan zul je daar de nodige html aan toe moeten voegen (er van uit gaande dat je een normale html pagina produceert)

bijv:
.test1<br/>.test2
@Kris en Frank: Thanks voor de heldere uitleg! Ik begrijp nu wat return precies doet en hoe ik zoiets op kan bouwen.

@Frank: Opmaak hoeft er niet bij, ik had de <br/> erbij gezet om niet alles achter en tegen elkaar te hebben bij het testen. Ik gebruik smarty om code en layout uit elkaar te houden :)
Nog makkelijker:
<?php
$string = 'test1|test2|test3|test4|test5|test6|test7|test8|test9';
echo implode('<br>.', explode('|', $string));
?>
Thanks! Door implode te gebruiken heb ik een ander deel van m'n code wat kunnen verkorten, en met wat zoekwerk naar implode op google kwam ik array_keys tegen welke ik daarin verwerkt heb. Bedankt voor je voorzetje. Zo leer ik er steeds weer wat bij :-)
Let er wel op:

.test1 ga je niet krijgen. Dan moet er |test1 instaan en jij hebt test1|test2etc...
Werkelijk Albert? Volgens mij heb je dan niet helemaal door hoe explode() werkt. Test het zelf eens zou ik zeggen.
Onee, mijn fout ;). Ik keek naar de input en de output en ging er van uit dat het vervangen werd. Sorry

Reageren