login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Laatste komma weg. (Opgelost)

Offline Chupskie - 30/05/2007 20:31 (laatste wijziging 30/05/2007 20:39)
Avatar van ChupskieMySQL 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
Offline delta_004 - 30/05/2007 20:40 (laatste wijziging 30/05/2007 20:41)
Avatar van delta_004 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

  1. <?
  2. $explode = explode(",", $str);
  3. $j = count($explode);
  4. $i=0;
  5. foreach($explode AS $stuk) {
  6. $i++;
  7. echo $stuk;
  8. if($i != $j) echo ',';
  9.  
  10. }
  11. ?>
Niet getest
Offline Chupskie - 30/05/2007 20:42
Avatar van Chupskie 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?
Offline delta_004 - 30/05/2007 20:45 (laatste wijziging 30/05/2007 20:45)
Avatar van delta_004 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...
Offline marten - 30/05/2007 20:45
Avatar van marten Beheerder Dit kan je met de functie substr doen. Als je even een moment hebt dan zoek ik even een voorbeeld op.
Offline Dark_Paul - 30/05/2007 20:46
Avatar van Dark_Paul PHP ver gevorderde Delta_004, dat is een beetje omslachtig. De functie implode() doet hetzelfde ;)
Offline delta_004 - 30/05/2007 20:47
Avatar van delta_004 Onbekend Ogja cool:P Nog nooit op die manier bekenen:P Is idd wel slim:D
Offline Chupskie - 30/05/2007 20:47 (laatste wijziging 30/05/2007 20:49)
Avatar van Chupskie MySQL beginner Ik weet nu hoe het heet: 'Verkorte if/else'

Dus het is iet als: voorwaarde ? juist : fout

Alvast bedankt?
Offline delta_004 - 30/05/2007 20:49
Avatar van delta_004 Onbekend
  1. <?
  2. $exp = explode(",", $str);
  3. echo implode(",", $exp);
  4. ?>
Zo gaat tog de laatste , weg:P?
Offline riekele - 30/05/2007 20:51
Avatar van riekele PHP beginner @chupskie, die 'verkorte if/else' heet overigens ternary;-)
Offline Dark_Paul - 30/05/2007 20:51
Avatar van Dark_Paul 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.
Offline delta_004 - 30/05/2007 20:52 (laatste wijziging 30/05/2007 20:52)
Avatar van delta_004 Onbekend Huh WT?
Ow je geeft een voorbeeldje:P?
Offline Chupskie - 30/05/2007 20:54 (laatste wijziging 30/05/2007 20:58)
Avatar van Chupskie 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
Offline Dark_Paul - 30/05/2007 21:00
Avatar van Dark_Paul 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.
Offline marten - 30/05/2007 21:00
Avatar van marten Beheerder Ga eens wat met de functie substr prutsen zorg dat je alle karakters over houd behalve de laatste. Tip: werk met -1 
Offline delta_004 - 30/05/2007 21:05
Avatar van delta_004 Onbekend Ow shit ja, ik lees nu pas dat de woorden een voor een in database staan....
Offline Chupskie - 30/05/2007 21:06 (laatste wijziging 30/05/2007 21:21)
Avatar van Chupskie 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:
  1. <?php
  2. $modules = get_loaded_extensions();
  3. foreach ($modules as $key => $valuez) {
  4. $value = (substr($valuez, -1) ? '' : ', ');
  5. echo $value;
  6. }
  7. ?>


@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:
  1. <?php
  2. $modules = get_loaded_extensions();
  3. foreach ($modules as $key => $value) {
  4. echo $value.", ";
  5. }
  6. ?>

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?
  1. <?php
  2. $modules = get_loaded_extensions();
  3. foreach ($modules as $key => $valuez) {
  4. $value = (substr($valuez -1) ? '' : ', ');
  5. echo $value.", ";
  6. }
  7. ?>


Iemand nog een tip?
Offline AgentX - 30/05/2007 21:19
Avatar van AgentX HTML beginner Ik denk overigens dat hij dit bedoelt:

  1. <?php
  2. $i = 1;
  3.  
  4. while(/* hier je query */) {
  5. if($i == 1){
  6. echo "Tekst";
  7. }
  8. else{
  9. echo ", Tekst";
  10. }
  11. $i ++;
  12. }
  13. ?>


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:

  1. Tekst, Tekst, Tekst, Tekst, Tekst


Succes ermee!
Offline Chupskie - 30/05/2007 21:27 (laatste wijziging 30/05/2007 21:30)
Avatar van Chupskie MySQL beginner @AgentX, ja dat is natuurlijk veel slimmer.. het eerste woord heb je altijd.

  1. <?php
  2. $modules = get_loaded_extensions();
  3. $i = 0;
  4. foreach ($modules as $key => $valuez) {
  5. $value = ($i == 0 ? '$valuez' : ', $valuez');
  6. echo $value;
  7. $i++;
  8. }
  9. ?>


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:
  1. <?php
  2. dit: $value = ($i == 0 ? '$valuez' : ', $valuez'); gewijzigd in
  3. dit: $value = ($i == 0 ? $valuez : ', '.$valuez);
  4. ?>


IEDEREEN SUPER BEDANKT!!!!!!!!!^^ :p
Offline Ultimatum - 30/05/2007 21:29
Avatar van Ultimatum PHP expert Zorg gewoon dat het 1 string word dan kan je zoals marten met substr() werken

  1. <?php
  2. substr($string, 0, (strlen($string) - 1);
  3. ?>
Offline Gerard - 30/05/2007 21:30
Avatar van Gerard Ouwe rakker
  1. <?php
  2.  
  3. echo implode(', ', $modules);
Offline Chupskie - 30/05/2007 21:32
Avatar van Chupskie 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:
  1. <?php
  2. $modules = get_loaded_extensions();
  3. $i = 0;
  4. foreach ($modules as $key => $valuez) {
  5. $value = ($i == 0 ? $valuez : ', '.$valuez);
  6. echo $value;
  7. $i++;
  8. }
  9. ?>


Nogmaals iedereen bedankt;-) ^^
Offline Dark_Paul - 30/05/2007 21:33
Avatar van Dark_Paul 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?
  1. <?
  2. $modules = get_loaded_extensions();
  3. echo implode($modules, ',');

Probeer dit eens, kan een verassend resultaat opleveren.
Offline Gerard - 30/05/2007 21:33
Avatar van Gerard Ouwe rakker @Dark_Paul
Eerst de 'glue', dan de array.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.314s