Laatste komma weg. (Opgelost)
Chupskie - 30/05/2007 20:31 (laatste wijziging 30/05/2007 20:39)
MySQL beginner
Hallo allemaal,
Mijn probleem, bij de volgende woorden (uit het db) komt achter elk woord een komma (zover goed), maar ik wil dit niet na laatste woord.
Bijv: tekst, tekst, tekst, tekst, Hoe krijg ik nu die laatste komma weg?
Het is iets met: ? ", " : "";
Iemand een idee, ik kom er echt niet meer op?
23 antwoorden
Gesponsorde links
delta_004 - 30/05/2007 20:40 (laatste wijziging 30/05/2007 20:41)
Onbekend
Je kan het exploden op een , en vervolgens met een foreach uitlezen. En met een tellertje $i controleren of $i niet gelijk is aan count $array
<?
$explode = explode(",", $str);
$j = count($explode);
$i=0;
foreach($explode AS $stuk) {
$i++;
echo $stuk;
if($i != $j) echo ',';
}
?>
<?
$i = 0 ;
foreach ( $explode AS $stuk ) {
$i ++;
}
?>
Niet getest
Chupskie - 30/05/2007 20:42
MySQL beginner
Volgens mij, was het toch echt korter.. zelfs maar een regel.
Het leek op een if / else je. If(laatste woord) ? "" : ", ";
(dus if laatste woord = het laatste, laat geen komma zien, else / anders wel een komma)
Iemand een idee?
delta_004 - 30/05/2007 20:45 (laatste wijziging 30/05/2007 20:45)
Onbekend
? en : hoort bij de if ja:P
Ik dacht niet dat er een functie ervoor bestond.... Je kan trouwens altijd een functie maken van dat scriptje boven je...
marten - 30/05/2007 20:45
Beheerder
Dit kan je met de functie substr doen. Als je even een moment hebt dan zoek ik even een voorbeeld op.
Dark_Paul - 30/05/2007 20:46
PHP ver gevorderde
Delta_004, dat is een beetje omslachtig. De functie implode() doet hetzelfde ;)
delta_004 - 30/05/2007 20:47
Onbekend
Ogja cool:P Nog nooit op die manier bekenen:P Is idd wel slim:D
Chupskie - 30/05/2007 20:47 (laatste wijziging 30/05/2007 20:49)
MySQL beginner
Ik weet nu hoe het heet: 'Verkorte if/else'
Dus het is iet als: voorwaarde ? juist : fout
Alvast bedankt?
delta_004 - 30/05/2007 20:49
Onbekend
<?
$exp = explode(",", $str);
echo implode(",", $exp);
?>
Zo gaat tog de laatste , weg:P?
riekele - 30/05/2007 20:51
PHP beginner
@chupskie, die 'verkorte if/else' heet overigens ternary;-)
Dark_Paul - 30/05/2007 20:51
PHP ver gevorderde
$var = ($v > $q) ? 'V is groter' : 'V is kleiner';
Als de waarde van $v groter is dan die van $q, zal 'V is groter' worden getoond. Is $v niet groter dan $q (kan dus ook gelijk zijn aan) dan wordt 'V is kleiner' getoond.
delta_004 - 30/05/2007 20:52 (laatste wijziging 30/05/2007 20:52)
Onbekend
Huh WT?
Ow je geeft een voorbeeldje:P?
Chupskie - 30/05/2007 20:54 (laatste wijziging 30/05/2007 20:58)
MySQL beginner
Ja oke. Maar nu wil ik dat dat alleen gebeurt bij het laatste woord.
Dus dat pas na het laatste woord geen komma meer wordt weergegeven.
Maar ik wacht nog even af. (en zoek onder tussen zelf ook nog verder)
Iemand een idee?
edit: typo
Dark_Paul - 30/05/2007 21:00
PHP ver gevorderde
Waarom zou je zo moeilijk doen?
Je hebt een array die je ophaalt uit de database.
Daarover gebruik je implode en klaar.
Gebruik van implode:
implode(array, seperator );
In jou geval dus:
implode($array, ',');
$array natuurlijk veranderen in de naam van jouw array.
delta_004 - 30/05/2007 21:05
Onbekend
Ow shit ja, ik lees nu pas dat de woorden een voor een in database staan....
Chupskie - 30/05/2007 21:06 (laatste wijziging 30/05/2007 21:21)
MySQL beginner
@Dark_Paul, ja dat uit het db was maar een voorbeeld.
Dit is de werkelijke code, ik heb nu ook implode erin gezet:
<?php
$modules = get_loaded_extensions();
foreach ($modules as $key => $valuez) {
$value = (substr($valuez, -1) ? '' : ', ');
echo $value;
}
?>
<?php
foreach ( $modules as $key => $valuez ) {
$value = ( substr ( $valuez , - 1 ) ?
'' : ', ' ) ; }
?>
@marten, ik zal dat ook even gaan proberen!
edit: de woorden zitten dus in een array, en worden met de foreach, een voor een doorgelopen, en achter elkaar gezet.
Strax had ik gewoon zoiets:
<?php
$modules = get_loaded_extensions();
foreach ($modules as $key => $value) {
echo $value.", ";
}
?>
<?php
foreach ( $modules as $key => $value ) {
}
?>
Dan krijg je dus dit:
standard, apache, session, curl, gd, imap, mbstring, mcrypt, overload, pcre, sockets, mysql, xml,
Met die komma op het eind. Ik ga nog even verder proberen met die implode, en substr. Iemand verder nog tips?
edit2: en met substrings wil het ook nog niet echt lukken?
<?php
$modules = get_loaded_extensions();
foreach ($modules as $key => $valuez) {
$value = (substr($valuez -1) ? '' : ', ');
echo $value.", ";
}
?>
<?php
foreach ( $modules as $key => $valuez ) {
$value = ( substr ( $valuez - 1 ) ?
'' : ', ' ) ; }
?>
Iemand nog een tip?
AgentX - 30/05/2007 21:19
HTML beginner
Ik denk overigens dat hij dit bedoelt:
<?php
$i = 1;
while(/* hier je query */) {
if($i == 1){
echo "Tekst";
}
else{
echo ", Tekst";
}
$i ++;
}
?>
<?php
$i = 1 ;
while ( /* hier je query */ ) {
if ( $i == 1 ) {
}
else {
}
$i ++;
}
?>
Uitleg:
Geen gezeur met laatste komma's weghalen, we halen gewoon de eerste weg! Als $i = 1 zet hij geen komma voor "Tekst". Anders wel; krijg je ", Tekst". Dus zul je deze opsomming krijgen:
Tekst, Tekst, Tekst, Tekst, Tekst
Tekst, Tekst, Tekst, Tekst, Tekst
Succes ermee!
Chupskie - 30/05/2007 21:27 (laatste wijziging 30/05/2007 21:30)
MySQL beginner
@AgentX, ja dat is natuurlijk veel slimmer.. het eerste woord heb je altijd.
<?php
$modules = get_loaded_extensions();
$i = 0;
foreach ($modules as $key => $valuez) {
$value = ($i == 0 ? '$valuez' : ', $valuez');
echo $value;
$i++;
}
?>
<?php
$i = 0 ;
foreach ( $modules as $key => $valuez ) {
$value = ( $i == 0 ? '$valuez' : ', $valuez' ) ;
$i ++;
}
?>
Doet het nu goed met de komma, alleen echo't ie nu dit:
$valuez, $valuez, $valuez, $valuez, $valuez, $valuez, $valuez, $valuez, $valuez, $valuez
Dus geen waardes
Iemand hier ook nog een idee voor? Dan is het helemaal opgelost?
Fixed:
<?php
dit: $value = ($i == 0 ? '$valuez' : ', $valuez'); gewijzigd in
dit: $value = ($i == 0 ? $valuez : ', '.$valuez);
?>
<?php
dit: $value = ( $i == 0 ? '$valuez' : ', $valuez' ) ; gewijzigd in
dit: $value = ( $i == 0 ? $valuez : ', ' . $valuez ) ;
?>
IEDEREEN SUPER BEDANKT!!!!!!!!!^^ :p
Ultimatum - 30/05/2007 21:29
PHP expert
Zorg gewoon dat het 1 string word dan kan je zoals marten met substr() werken
<?php
substr($string, 0, (strlen($string) - 1);
?>
Gerard - 30/05/2007 21:30
Ouwe rakker
<?php
echo implode(', ', $modules);
Chupskie - 30/05/2007 21:32
MySQL beginner
@ultimatum, bedankt maar het werkt nu precies zoals ik wou. Dus ik laat het hierbij. Het schilt in totaal maar 1 regel, dus zal niet zo super erg zijn, ofwel?
De werkende code:
<?php
$modules = get_loaded_extensions();
$i = 0;
foreach ($modules as $key => $valuez) {
$value = ($i == 0 ? $valuez : ', '.$valuez);
echo $value;
$i++;
}
?>
<?php
$i = 0 ;
foreach ( $modules as $key => $valuez ) {
$value = ( $i == 0 ? $valuez : ', ' . $valuez ) ;
$i ++;
}
?>
Nogmaals iedereen bedankt;-) ^^
Dark_Paul - 30/05/2007 21:33
PHP ver gevorderde
@Chupskie: variabelen buiten quotes.
Hoe vaak heb ik de functie implode() al aangeraden? Ik dacht al 2 keer, waarom kijk je daar niet naar?
$modules is blijkbaar een array, dus dan is het toch niet moeilijk?
<?
$modules = get_loaded_extensions();
echo implode($modules, ',');
Probeer dit eens, kan een verassend resultaat opleveren.
Gerard - 30/05/2007 21:33
Ouwe rakker
@Dark_Paul
Eerst de 'glue', dan de array.
Gesponsorde links
Dit onderwerp is gesloten .