[GastForen Programmierung/Entwicklung PHP und MySQL Text kürzen bei Array

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Text kürzen bei Array

jdgf
Beiträge gesamt: 117

4. Mär 2008, 07:27
Beitrag # 1 von 16
Bewertung:
(7164 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

bei einem Kalenderblatt soll in der Vorschau nur eine bestimmte Textlänge (zb. 300 Zeichen) angezeigt werden. Ich finde keine Lösung, das der Einsatz von substr mit
Code
$ergebnis = substr($ergebnis, 650); 

zu Fehlern führt. Müßte man hier jede Spalte einzeln kürzen?

Code
<?php 
// Datenbankabfrage
$abfrage = "SELECT jahr, text FROM kalenderblatt WHERE datum = $datum ORDER BY jahr ASC";

$ergebnis = mysql_query($abfrage);
// Datenausgabe

while($row = mysql_fetch_object($ergebnis))
{
// $ergebnis = substr($ergebnis, 650);
//echo "<p class=\"strong\">$row->jahr</p><p class=\"standard\">$row->text</p><br>";
echo "<p><strong style=\"padding-right:5px\">$row->jahr:</strong>$row->text</p>";
}
?>


Danke für Eure Hilfe,
Gruß Dietmar
X

Text kürzen bei Array

minou
Beiträge gesamt: 135

4. Mär 2008, 07:48
Beitrag # 2 von 16
Beitrag ID: #339935
Bewertung:
(7157 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

du hast einen Parameter vergessen,

es geht immer so: substr("variable", start, länge);

also bei dir wäre das:
Code
$resutlat = substr("$string", 0, 300); 


minou

Nachtrag: du kannst das Ergebnis-Array nicht einfach so kürzen. Nimm doch den Text aus dem Ergebnis, das kannst du ja gut mit dem Spaltennamen.

z.B.

Code
$text = $ergebnis['textspalte']; 
substr("$text", 0, 300);


Am besten machst du das direkt in der Schleife, wenn du die Zeilen ausgibst. Weil es ein Array ist, muss auch das $ergebnis wieder in eine Schleife um alle Texte zu kürzen. Aber für die Ausgabe musst du ja sowieso iterieren.


als Antwort auf: [#339934]
(Dieser Beitrag wurde von minou am 4. Mär 2008, 08:04 geändert)

Text kürzen bei Array

jdgf
Beiträge gesamt: 117

4. Mär 2008, 10:07
Beitrag # 3 von 16
Beitrag ID: #339951
Bewertung:
(7127 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo minou,

danke für deine Hilfe.

Die Schleife wird bis zu 7mal durchlaufen, was in der Vorschau nicht sein sollte. Müßte ich deshalb einfach immer die 1. Schleife vollständig ausgeben lassen und dann die 2. Schleife bis auf 100 Zeichen kürzen.

Gruß,
Dietmar


als Antwort auf: [#339935]

Text kürzen bei Array

minou
Beiträge gesamt: 135

4. Mär 2008, 11:20
Beitrag # 4 von 16
Beitrag ID: #339961
Bewertung:
(7117 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Dietmar,

ich hoffe ich verstehe dich richtig. Du darfst in der Vorschau für die gesamte Ausgabe nur eine gewisse Länge haben?

In meinen Augen gibt es zwei Ansätze:

1. du zählst die Datensätze und dividierst für das substr die erlaubte Länge durch die anzahl Datensätze.

(etwa so)
Code
$laenge = count(resultat_von_DB); 
$textlaenge = intval(600 / $laenge);


jetzt kannst du einen substr($text, 0, $textlaenge) machen...

2. Oder du vergibst für substr() einen festen Wert, z.B. 30 Zeichen.

Code
$text = substr($resultat, 0, 30)  
echo $text . "...";



3. Oder du möchtest nur die ersten Einträge ausgeben lassen, dieser Code gäbe die Einträge 0,1 und 2 aus bei < anstatt <= nur 0 und 1. Die Zahl wo jetzt 2 steht bestimmt wie oft (wieviele Durchläufe also) die Ausgabe wiederholt wird.
Code
for($a=0; $a <= 2; $a++) { 
echo $row->das . "Beschreibung" . $row->dies;
}



Wenn du es genauer brauchst, so stelle doch mal den ganzen Code für diese Ausgabe hier ein.

Gruss

minou

P.S. für dich wäre ev. explode() noch interessant, diese Funktion macht ein String aus einem Array, diesen könntest du dann direkt kürzen...


als Antwort auf: [#339951]
(Dieser Beitrag wurde von minou am 4. Mär 2008, 11:21 geändert)

Text kürzen bei Array

Intermedia
Beiträge gesamt: 1287

4. Mär 2008, 11:24
Beitrag # 5 von 16
Beitrag ID: #339962
Bewertung:
(7115 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

hier ist mal eine Funktion für das Kürzen von Texten mit Berücksichtigung von Wörtern.

Code
 
function text_kuerzen($text, $laenge)
{
if (!$text_kurz = preg_replace('=^(.{' . $laenge . '}\S*).*?$=s', '$1', $text)) {
$text_kurz = $text;
}
return $text_kurz;
}


übergeben wird der Text und die Länge.
Eventuell hilft es dir weiter.

Gruß Sven


http://www.aurahysil.de?hds Mit Aurahysil Freizeit schaffen - Beschichtungen der besonderen Art - http://www.intermedia-bg.de?hds INTERMEDIA bürogemeinschaft


als Antwort auf: [#339961]

Text kürzen bei Array

jdgf
Beiträge gesamt: 117

4. Mär 2008, 12:46
Beitrag # 6 von 16
Beitrag ID: #339979
Bewertung:
(7087 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Minou und Sven,

ich glaube, ich habe es vielleicht falsch beschrieben. Ihr könnt euch die Ausgabe der Kalenderblattes ansehen ->http://www.kolping-hohenfels.de. Im Ergebnis soll auf der Startseite etwa 1 1/2 Ereignisse des Tages stehen.

Der Ausgabecode nach der Datenbankverbindungsaufbau ist nur:
Code
<?php 
//Tagesdatum festlegen
$timestamp = time();
$datum = date("md", $timestamp);

// Datenbankabfrage
$abfrage = "SELECT jahr, text FROM kalenderblatt WHERE datum = $datum ORDER BY jahr ASC";
$ergebnis = mysql_query($abfrage);

// Datenausgabe
while($row = mysql_fetch_object($ergebnis))
{
echo "<p><strong style=\"padding-right:5px\">$row->jahr:</strong>$row->text</p>";
}
?>


Gruß,
Dietmar


als Antwort auf: [#339962]

Text kürzen bei Array

Intermedia
Beiträge gesamt: 1287

4. Mär 2008, 12:51
Beitrag # 7 von 16
Beitrag ID: #339980
Bewertung:
(7084 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Dietmar,

Zitat Im Ergebnis soll auf der Startseite etwa 1 1/2 Ereignisse des Tages stehen.


wie ist denn das zu verstehen? Du meinst bestimmt nicht 1 1/2 Datensätze? ;-)

Gruß Sven


http://www.aurahysil.de?hds Mit Aurahysil Freizeit schaffen - Beschichtungen der besonderen Art - http://www.intermedia-bg.de?hds INTERMEDIA bürogemeinschaft


als Antwort auf: [#339979]

Text kürzen bei Array

jdgf
Beiträge gesamt: 117

4. Mär 2008, 13:03
Beitrag # 8 von 16
Beitrag ID: #339981
Bewertung:
(7075 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Sven,

also rein optisch gesehen ja; in Zeichen können es 300, 400 oder 500 sein, wenn es insgesamt berechnet wird. Das möchte ich erst mal ausprobieren.

Ich dachte mir, man könnte in mysql die Datensätze eines Tages sortieren; dann den ersten ausgeben - anschließend das Kalenderdatum des zweiten Datensatzes ausgeben und zuletzt mit substr den Text des zweiten Datensatzes auf 100 Zeichen kürzen und ausgeben.

Gruß,
Dietmar


als Antwort auf: [#339980]

Text kürzen bei Array

Intermedia
Beiträge gesamt: 1287

4. Mär 2008, 13:35
Beitrag # 9 von 16
Beitrag ID: #339988
Bewertung:
(7069 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

glaub jetzt hab ich es einigermaßen verstanden. :-)

Hmm... du könntest alle Ergebnisse in einen String schreiben und den dann kürzen.
Um die einzelnen Themen auseinander zu halten könnte man ein Trennzeichen einsetzen. Anhand dessen dann wieder splitten und ausgeben.

Sonst hab ich auf Anhieb auch keine Idee weiter.

Gruß Sven


http://www.aurahysil.de?hds Mit Aurahysil Freizeit schaffen - Beschichtungen der besonderen Art - http://www.intermedia-bg.de?hds INTERMEDIA bürogemeinschaft


als Antwort auf: [#339981]

Text kürzen bei Array

ganesh
Beiträge gesamt: 1981

4. Mär 2008, 14:23
Beitrag # 10 von 16
Beitrag ID: #339995
Bewertung:
(7057 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wieso nicht Strings mit mySQL kürzen? Das ist effizienter.


// erste 5 Sätze:
SELECT id, txt, SUBSTRING_INDEX(txt, '.', 5) AS intro FROM `tablename`

// erste 5 Wörter:
SELECT id, txt, SUBSTRING_INDEX(txt, ' ', 5) AS intro FROM `tablename`

// die ersten 300 Zeichen:
SELECT id, txt, SUBSTRING(txt, 0, 300) AS intro FROM `tablename`


http://dev.mysql.com/...html#function_substr


als Antwort auf: [#339934]

Text kürzen bei Array

jdgf
Beiträge gesamt: 117

4. Mär 2008, 17:27
Beitrag # 11 von 16
Beitrag ID: #340016
Bewertung:
(7018 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo ganesh,

irgendwie funktioniert es nicht, obwohl der Code stimmen müßte.
Code
<?php 
// Datenbankabfrage
$abfrage = "SELECT jahr, SUBSTRING_INDEX(text, 0, 150) AS auszug FROM kalenderblatt WHERE datum = $datum ORDER BY jahr ASC";

//$abfrage = "SELECT jahr, text FROM kalenderblatt WHERE datum = $datum ORDER BY jahr ASC";
$ergebnis = mysql_query($abfrage);

// Datenausgabe
while($row = mysql_fetch_object($ergebnis))
{
style=\"padding-right:5px\">$row->jahr:</strong>$row['auszug']</p>";
}
?>
Code
 
Gruß, Dietmar


als Antwort auf: [#339995]

Text kürzen bei Array

oesi50
  
Beiträge gesamt: 2315

4. Mär 2008, 17:43
Beitrag # 12 von 16
Beitrag ID: #340018
Bewertung:
(7016 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo dietmar,

du musst dich schon entscheiden, ob du mysql_fetch_object oder mysql_fetch_assoc verwenden willst.

btw: fetch_assoc ist schneller und verbraucht weniger Speicher


Grüße Oesi
Ich weiß, dass ich nicht weiß... (Sokrates)


als Antwort auf: [#340016]
(Dieser Beitrag wurde von oesi50 am 4. Mär 2008, 17:45 geändert)

Text kürzen bei Array

jdgf
Beiträge gesamt: 117

4. Mär 2008, 21:01
Beitrag # 13 von 16
Beitrag ID: #340054
Bewertung:
(6989 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Oesi,

ich habe mir die beiden Varianten angesehen, da ich in mysql noch sehr viel lernen muss. Ich habe auch beide ausprobiert, aber in beiden Fällen funktioniert es nicht.
$row ist doch eine Variable oder setzt ihre Verwendung fetch_assoc voraus?

Gruß Dietmar


als Antwort auf: [#340018]

Text kürzen bei Array

oesi50
  
Beiträge gesamt: 2315

4. Mär 2008, 22:46
Beitrag # 14 von 16
Beitrag ID: #340073
Bewertung:
(6978 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
mit mysql_fetch_assoc ist $row ein assoziatives Array

mit mysql_fetch_object ist $row ein Objekt

auf ein assoziatives Array greift man so zu: $row['jahr']

auf eine Objekteigenschaft greift man so zu: $row->jahr


Grüße Oesi
Ich weiß, dass ich nicht weiß... (Sokrates)


als Antwort auf: [#340054]

Text kürzen bei Array

jdgf
Beiträge gesamt: 117

5. Mär 2008, 08:26
Beitrag # 15 von 16
Beitrag ID: #340106
Bewertung:
(6952 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Oesi,

danke für den Tip. Ganz funktioniert es noch nicht. Ich habe jetzt alle Möglichkeiten probiert; der Text wird aber nicht gekürzt.
Aktueller Code:
Code
$abfrage = "SELECT jahr, SUBSTRING_INDEX(text, 0, 10) AS auszug FROM kalenderblatt WHERE datum = $datum ORDER BY jahr ASC";  
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_assoc($ergebnis))
{
echo $row['jahr'];
echo $row['auszug'];
}


Wenn ich bei der Ausgabe den Code
Code
echo "$row['jahr']<br>$row['auszug']"; 

oder die bisherige Formatierung
Code
echo "<p><strong style=\"padding-right:5px\">$row['jahr']</strong>$row['auszug']</p>"; 

verwende, bleibt der Bildschirm weiß; die letzte Zeile wird im Originalscript verwendet und funktioniert.
Du kannst die Ergebnisse für die gekürzte Version unter
http://testpage.kolping-hohenfels.de/index.htm und für die vollständige Version unter http://www.kolping-hohenfels.de sehen.

Gruß,
Dietmar


als Antwort auf: [#340073]
X

Aktuell

InDesign / Illustrator
ScreenShot 274 Warum Templates in InDesign benutzen_ - Satzkiste in Stuttgart - Satz und technische Umsetzung - Google Chrome (300x300 HilfDirSelbst)

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022
Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022