Seite 1 von 1

Array auf 10 Stellen kürzen

Verfasst: 06.08.2006, 10:36
von mark007q
Ich habe ein kleines Problem und zwar:

Code: Alles auswählen

$stats['last_topic']  = mysql_fetch_row($result); 
Hier wird an die Variable $stats['last_topic'] ein Array übergeben, dass je nach Auslesung aus der Datenbank natürlich in der Länge variert.

Nun würde ich gerne dieses Variable (Array) auf max. 10 Stellen kürzen.

Mit substr geht das ja leider nicht, da es sich nicht um einen string, sondern um ein array handelt.

Wie kann ich denn obigen code kürzen auf 10 Stellen?

Verfasst:
von

Re: Array auf 10 Stellen kürzen

Verfasst: 06.08.2006, 10:52
von oldInternetUser
mark007q hat geschrieben:Nun würde ich gerne dieses Variable (Array) auf max. 10 Stellen kürzen.

Mit substr geht das ja leider nicht, da es sich nicht um einen string, sondern um ein array handelt.

Wie kann ich denn obigen code kürzen auf 10 Stellen?
Das ist der falsche Ansatz, die Daten wurden ja bereits geholt. Ändere den Sql-Befehl ab, so daß er maximal 10 Zeilen zurückgibt - dann existiert das Problem nicht.

Das ist ohnehin grundlegend falsch - 100 Zeilen zurückerhalten und 90 davon verwerfen.

Verfasst: 06.08.2006, 11:11
von mark007q
Leider weiß ich nicht wie ich den SQL Befehl ändern muss, sodass er nur 10 Zeichen zurückgibt ...

Verfasst: 06.08.2006, 11:19
von Michael1967
Das habe ich gerade gefunden. Vielleicht hift es dir ja.

Code: Alles auswählen

$trunc_array= array_slice($array, 0, count($array)-$num_elements_to_chop_off, true); 
Quelle: https://www.mediengestalter.info/forum/ ... 677-1.html

Verfasst: 06.08.2006, 11:20
von pebosi
häng einfach an den SQL Befehl ein "LIMIT 10" dran.

Verfasst: 06.08.2006, 11:41
von mark007q
@Michael: Danke, hatte ich auch schon gesehen - klappt aber nicht :(

@pebosi: Wie genau muss das denn aussehen?

Ich habe folg. Abfrage:

Code: Alles auswählen

$result = mysql_query("SELECT name FROM ".$dbPrefix."topic ORDER BY last_post DESC LIMIT 0, 100");
Da muss das Limit 10 rein? Wenn ja, wo genau?

Von der Logik her ist das alles klar, aber die Syntax von PHP erschließt sich mir noch nicht so richtig ...

Verfasst: 06.08.2006, 12:03
von Michael1967
So meint er das -

Code: Alles auswählen

$result = mysql_query("SELECT name FROM ".$dbPrefix."topic ORDER BY last_post DESC LIMIT 0, 10");

Verfasst: 06.08.2006, 12:10
von mark007q
Das hatte ich mir auch gedacht, aber damit gibt es keine Veränderung ... es werden weiterhin auch 20, 30 100 oder mehr Zeichen ausgegeben ...

Verfasst: 06.08.2006, 12:44
von pebosi
achso, du willst vom "name" nur 10 Zeichen ausgeben oder was jetzt?

das wäre dann so:

Code: Alles auswählen

$result = mysql_query("SELECT SUBSTRING(name, 0, 10) FROM ".$dbPrefix."topic ORDER BY last_post DESC LIMIT 0, 10");

Verfasst: 06.08.2006, 12:52
von mark007q
Dann wird gar nichts mehr ausgegeben ...

Verfasst: 06.08.2006, 13:46
von pebosi
probier das mal:

Code: Alles auswählen

$result = mysql_query("SELECT SUBSTRING(name, 10) FROM ".$dbPrefix."topic ORDER BY last_post DESC LIMIT 0, 10");

Verfasst: 06.08.2006, 14:32
von mark007q
Da werden dann (warum auch immer) nur noch die letzten 3 Zeichen ausgegeben.

Erzähl du doch mal deinen Lösungsansatz OldInternetUser.

Verfasst: 06.08.2006, 16:45
von pebosi
ich denke OLdInternetUser hat auch das mit dem LIMIT gemeint, was genau willst du denn nun eigentlich? Sollen nur 10 Beiträge ausgeben werden, oder sollen die Titel der BEiträge nur 10 Zeichen lang sein?

Verfasst: 06.08.2006, 17:18
von Michael1967
Ich weiß nicht ob das richtig ist, aber ich habe hier auf meiner Platte etwas gefunden.

Code: Alles auswählen

function cutnews ( $text, $zeichen, $kolanz = 3, $punkte = 0 ) {
	    $newstr = "";
	    
	    $text = trim ( stripslashes ( htmlspecialchars ( $text, ENT_QUOTES ) ) ); 
	    $zeichen = intval ( $zeichen );
	    $kolanz = intval ( $kolanz ); 
	    $punkte = intval ( $punkte );
	    
        if &#40; strlen &#40; $text &#41; < $zeichen + $kolanz &#41; &#123;
	         return $text;
        &#125; else &#123;
        &#125;
        
        $wort = explode &#40; " ", $text &#41;;

        $i = 0;
        while &#40; strlen &#40; $newstr &#41; <= $zeichen && strlen &#40; $newstr.$wort&#91;$i&#93; &#41; <= &#40; $zeichen + $kolanz &#41; &#41; &#123;
                $newstr .= $wort&#91;$i&#93;." ";
                $i++;
        &#125;
        $newstr .= str_repeat &#40; ".", $punkte &#41;;
        
        return $newstr;
&#125;

Code: Alles auswählen

echo "".cutnews &#40; $title, 60, 5, 3 &#41;."<br />";

Verfasst: 06.08.2006, 22:52
von Ice Man
$j = stripslashes($stats['last_topic']);
$kurz = substr($j, 0, 5) . "";

Das gibt den Wert nur von Stelle 0 bis 5 aus.
Das funktioniert mit Zahlen und Wörtern.