rtrim werkt niet?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wouter Van Marrum

Wouter Van Marrum

16/03/2015 20:57:53
Quote Anchor link
Hallo iedereen,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>
 
PHP hulp

PHP hulp

13/03/2025 01:40:07
 
Ozzie PHP

Ozzie PHP

16/03/2015 21:01:17
Quote Anchor link
Je laatste teken is ook geen komma, maar een spatie. Try this:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo substr($str, 0, -2);
?>
 
Eddy E

Eddy E

16/03/2015 21:04:23
Quote Anchor link
Of beter, regel 4 tm 7:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(is_array($inc))
    {

    $str = implode(", ", $inc);
    }

?>


Wat je wilt met die quotes er om heen, is mij onduidelijk.
Gewijzigd op 16/03/2015 21:25:56 door Eddy E
 
Frank Nietbelangrijk

Frank Nietbelangrijk

16/03/2015 21:07:19
Quote Anchor link
je kunt beter gebruik maken van implode()

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript">
    FLEX.autoLoader({
        <?php
            if(is_array($inc)) }
        $arr = array();
                foreach($inc as $file) {
                    $arr[] = " \"{$file}\", ";
                }
            }

            echo implode(',', $arr);
        ?>

    });
</script>
Gewijzigd op 16/03/2015 21:08:03 door Frank Nietbelangrijk
 
Wouter Van Marrum

Wouter Van Marrum

16/03/2015 21:15:26
Quote Anchor link
@Frank, Dankjewel dit werkt helemaal goed.

Was helemaal vergeten wat implode deed.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

16/03/2015 21:18:54
Quote Anchor link
top!
 
Thomas van den Heuvel

Thomas van den Heuvel

16/03/2015 22:24:37
Quote Anchor link
Wut?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$arr
= array();
foreach($inc as $file) {
    $arr[] = " \"{$file}\", ";
}

echo implode(',', $arr);
?>

Voegt dit niet teveel komma's toe?

Ik zou eerder zoiets verwachten?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$arr
= array();
foreach($inc as $file) {
    $arr[] = '"'.$file.'"'; // of enkele quotes, als je dat leuk vindt
}
echo implode(',', $arr);
?>

?
 
Willem vp

Willem vp

17/03/2015 00:38:38
Quote Anchor link
Brr... een array $arr aanmaken alleen maar om een paar quotes toe te voegen? Dan zou ik het zo doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$str
= '"' . join('", "', $inc) . '"';
?>
 
Thomas van den Heuvel

Thomas van den Heuvel

17/03/2015 01:20:22
Quote Anchor link
En dan een controle of $inc een niet-leeg array is (anders krijg je een leeg element) en het gebruik van implode (join is een alias van implode) en hij is perfect :).

Zoiets dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (is_array($inc) && count($inc) > 0) {
    echo '"'.implode('", "', $inc).'"';
}

?>


De variant van Frank levert trouwens teveel komma's op.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/03/2015 09:57:44
Quote Anchor link
idd willem zijn oplossing is netter.
 
Thomas van den Heuvel

Thomas van den Heuvel

17/03/2015 12:44:56
Quote Anchor link
Not quite, om bovengenoemde redenen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/03/2015 13:08:22
Quote Anchor link
Thomas,

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.
 
Willem vp

Willem vp

17/03/2015 13:18:21
Quote Anchor link
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. ;-)
 
Thomas van den Heuvel

Thomas van den Heuvel

17/03/2015 13:29:23
Quote Anchor link
Whoa, calm your tits.

"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?
 
Wouter Van Marrum

Wouter Van Marrum

17/03/2015 15:23:06
Quote Anchor link
In mijn geval levert dit niet teveel quotes op.
Nogmaals bedankt !
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.