Nur die ersten 30 Buchstaben aus Abfrage ausgeben

Gifty43

Erfahrenes Mitglied
Moin Leute,

Gibt es in PHP irgendein Befehl dafür, dass er mit aus einem Text (welcher aus einer DB-Abfrage) kommt nur die ersten x Buchstaben ausgibt und dafür noch drei Punkte ("...") hinten dranfügt?

THX 4 help.
 
PHP:
/*
 *@name: shortStr
 *@desc: Gibt die ersten x Zeichen aus, optional bis zum ersten Vorkommen von firstMatch und fügt optional $add an den String an
*/
function shortStr($str, $x=30, $firstMatch='', $add='…'){
	if(empty($firstMatch))
		return substr($str, 0, $x).$add;
	else
		return substr($str, 0, strpos($str, $firstMatch, $x)).$add;
}

Grad mal zusammengeschrieben und zu meinen Codeschnippseln hinzugefügt.
 
Moin,

Hab dein Script gleich mal eingebaut, doch es scheint irgendwie nicht zu ...

PHP:
$release_q = mysql_query("SELECT * FROM games");
while($release = mysql_fetch_array($release_q)) {
$str = $release["title"];
 echo'
  <tr>
   <td>'.$release["termin"].'</td>
   <td>';
   function shortStr($str, $x=30, $firstMatch='', $add='...'){
    if(empty($firstMatch))
        return substr($str, 0, $x).$add;
    else
        return substr($str, 0, strpos($str, $firstMatch, $x)).$add;
    }
   echo'</td>
  </tr>
 ';
}

Es werden zwar zwei Termine angezeigt, jedoch nicht der Name des Spiels.

Grad ne Idee an was es liegen könnte?

Gruss,
Gifty
 
Die Funktion tust du irgendwo ins Script hinein und dort wo der Name auftauchen soll, schreibst du nur:
PHP:
<?php
echo shortStr($str, $x=30, $firstMatch='', $add='...');
?>
 
Du müsstest die Funktion mal aufrufen. Du definierst sie zwar, aber rufst sie nirgends auf, somit wird sie auch nicht ausgeführt und es erfolgt keine Ausgabe.

PHP:
$release_q = mysql_query("SELECT * FROM games");

function shortStr($str, $x=30, $firstMatch='', $add='...'){
    if(empty($firstMatch))
        return substr($str, 0, $x).$add;
    else
        return substr($str, 0, strpos($str, $firstMatch, $x)).$add;
    }

while($release = mysql_fetch_array($release_q)) {
 echo'
  <tr>
   <td>'.$release["termin"].'</td>
   <td>';
       echo  shortStr($str = $release["title"]);
   echo'</td>
  </tr>
 ';
}
 
Danke vielmals.

Jetzt gibt er mir zwar etwas aus, aber nur den ersten Datensatz.

Der Name dieses Datensatzes den er ausgibt ist kleiner als 30 Zeichen (etwa 6 Zeichen) und trotzdem macht er die Punkte dahinter. Wie lässt sich das vermeiden?
 
Ersetz die Funktion wie folgt:
PHP:
/*
 *@name: shortStr
 *@desc: Gibt die ersten x Zeichen aus, optional bis zum ersten Vorkommen von firstMatch und fügt optional $add an den String an
*/
function shortStr($str, $x=30, $firstMatch='', $add='…'){
    if(empty($firstMatch))
        return substr($str, 0, $x).((strlen($str) > $x) ? $add : '');
    else
        return substr($str, 0, strpos($str, $firstMatch, $x)).((strlen($str) > $x) ? $add : '');
}
 
Zuletzt bearbeitet:
Zurück