rtrim werkt niet?
Ik heb een loop die script namen bevat plus comma's.
Nu wil ik de laatste comma van de loop weghalen door middel van rtrim.
Helaas werkt niet, wat zou ik hier aan kunnen doen ?
Hier de code :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type="text/javascript">
FLEX.autoLoader({
<?php
if(is_array($inc)):
foreach($inc as $file) {
$str .= " \"{$file}\", ";
}
endif;
echo $str; //Origineel : "Pagelist", "Editor", "woot",
echo "///"; // : ///
echo rtrim($str, ","); // Haalt de comma niet weg. : "Pagelist", "Editor", "woot",
?>
});
</script>
FLEX.autoLoader({
<?php
if(is_array($inc)):
foreach($inc as $file) {
$str .= " \"{$file}\", ";
}
endif;
echo $str; //Origineel : "Pagelist", "Editor", "woot",
echo "///"; // : ///
echo rtrim($str, ","); // Haalt de comma niet weg. : "Pagelist", "Editor", "woot",
?>
});
</script>
Wat je wilt met die quotes er om heen, is mij onduidelijk.
Gewijzigd op 16/03/2015 21:25:56 door Eddy E
Was helemaal vergeten wat implode deed.
top!
Code (php)
Voegt dit niet teveel komma's toe?
Ik zou eerder zoiets verwachten?
Code (php)
?
Zoiets dus:
Code (php)
De variant van Frank levert trouwens teveel komma's op.
idd willem zijn oplossing is netter.
Not quite, om bovengenoemde redenen.
Als de array leeg is dan zou je inderdaad '""' overhouden. Als dat een probleem kan zijn dan moet je dat uiteraard op één of andere wijze weer afvangen.
Thomas van den Heuvel op 17/03/2015 01:20:22:
En dan [...] het gebruik van implode (join is een alias van implode) en hij is perfect :).
Hier suggereer je dat je beter implode() kunt gebruiken dan join() omdat join() een alias is. Dat vind ik wat kort door de bocht. Een alias wordt nooit zonder reden aangemaakt. Waarschijnlijk is join() in dit geval zelfs aangemaakt omdat de makers van PHP zelf ook niet helemaal overtuigd waren van de kwaliteit van een functienaam als implode(). ;-)
Explode() en implode() vind ik het schoolvoorbeeld van functies die een verkeerde naam hebben. Regel 1 bij het bedenken van een functienaam is dat de naam moet beschrijven wat de functie doet. En dat is hier niet het geval. Explode en implode associeer ik met compressie/decompressie en niet met het ophakken in stukjes of het samenvoegen daarvan. Sterker nog: de naam 'implode' suggereert dat je je data kleiner maakt, maar op het moment dat je een separator toevoegt (zeker als die langer is dan 1 of 2 tekens) wordt je output zelfs groter dan je input. En op die manier kan met explode() je data dus ook kleiner worden, in tegenstelling tot wat de naam suggereert. Ik vind de namen dus verre van intuïtief en zelfs ondanks dat ik al meer dan 15 jaar met PHP werk (waarvan het eerste jaar in PHP3, die nog geen explode/implode had) moet ik nog elke keer dat ik die functies tegenkom, beredeneren welke functie wat doet. Ik vind het dan ook veel duidelijker om gebruik te maken van join(). Helaas is de tegenhanger split() in de laatste PHP-versies deprecated (overigens ten faveure van preg_split()).
In elke willekeurige taal die ik kan bedenken (Perl, Python, C#, JavaScript, VBScript, Ruby, om er eens een paar te noemen) worden de functies join() en split() gebruikt voor het opdelen van een string dan wel het samenvoegen van een array. Waarom moet PHP dan ineens zo exotisch doen met explode() en implode()? De enige reden die ik daarvoor kan bedenken, is omdat ze dan consequent inconsequent zijn met de functienamen die gebruikt worden (want de makers van PHP hebben er echt een bende van gemaakt).
Maar goed, ik wil dus eigenlijk vooral zeggen dat je niet simpelweg kunt stellen dat er één universele waarheid is die bepaalt dat implode() beter is dan join() of andersom. Ze zijn allebei even goed, en het is meer een kwestie van persoonlijke voorkeur welke je gebruikt. Het moge duidelijk zijn waar mijn voorkeur ligt. ;-)
"Beter" in die zin dat als er twee functies zijn die hetzelfde doen, het doorgaans de alias is die eerst sneuvelt. explode() is een "verstandigere" keuze in die zin dat deze functie binnenkort waarschijnlijk niet (als eerste) uitgerangeerd wordt. Ik heb het helemaal niet over performance of handige naamgeving.
Quote:
Als dat een probleem kan zijn dan moet je dat uiteraard op één of andere wijze weer afvangen.
Volgens mij is dat precies wat ik doe in mijn laatste codefragment?
Nogmaals bedankt !