Avatar billede vitin.fo Nybegynder
01. maj 2003 - 14:40 Der er 34 kommentarer og
2 løsninger

Splitte en lang tekst - Split a text string into two columns

Hvordan spliter jeg en lang tekst i to så jeg kan præsentere en lang tekst i to kolonner. Jeg vil gerne have at teksten bliver splittet i et mellemrum.
Avatar billede fangel Nybegynder
01. maj 2003 - 14:49 #1
øhhh.... hva?

du har en lang tekst, og du vil gerne have den splittet i to... hmm... hvis vi ser bort fra mellemrum, så kan du bruge

$str = "her er en meget lang streng jeg vil have i to dele..."
$start = substr($str, 0, strlen($str)/2);
slut = substr($str, strlen($str)/2, strlen($str)/2);

så har du i hvert fald delt strengen op i to... så kan vi begynde at tænke lidt over at dele det ved et mellem rum

$forsteMellemrum = strpos(" ", $slut);
$nyStart = $start . substr($slut, 0, $forsteMellemrum);
$nySlut = substr($slut, $forsteMellemrum, strlen($slut());

det er absolut UTESTET, og jeg er usikker på om jeg har glemt at kompencere for noget... men test det lige...

Morten
Avatar billede fangel Nybegynder
01. maj 2003 - 14:50 #2
hov, mangler et $ forand første "slut"...

og for at lave lidt sammenhold:

<?php
$str = "her er en meget lang streng jeg vil have i to dele..."
$start = substr($str, 0, strlen($str)/2);
$slut = substr($str, strlen($str)/2, strlen($str)/2);

$forsteMellemrum = strpos(" ", $slut);
$nyStart = $start . substr($slut, 0, $forsteMellemrum);
$nySlut = substr($slut, $forsteMellemrum, strlen($slut());

echo $nyStart . "<br><hr><br>" . $nySlut;
?>

Morten
Avatar billede schaefner Juniormester
01. maj 2003 - 14:53 #3
Noget ala det her?

<?php
$text = "Moget tekst";
$newtext = wordwrap($text,strlen($text)/2,"\n");
$arr = explode("\n", $newtext);
?>

<table width="100%" border="1"><tr>
<td width="50%"><?php echo "$arr[0]"; ?></td>
<td width="50%"><?php echo "$arr[1]"; ?></td>
</tr></table>
Avatar billede schaefner Juniormester
01. maj 2003 - 14:55 #4
Det er dog utestet.
Avatar billede fangel Nybegynder
01. maj 2003 - 14:56 #5
schaefner => kender ik' den funktion, men går ud fra så også kan bruge noget ala dette:

<table width="100%" border="1">
<tr>
<td width="50%">
<?php
$text = "Moget tekst";
echo wordwrap($text,strlen($text)/2,"</td><td width="50%">");
?>
</td>
</tr>
</table>

Morten
Avatar billede jakoba Nybegynder
01. maj 2003 - 15:23 #6
som spørgsmål er det pølsenemt at forestille sig at det skulle da ikke være noget problem.

Men det er det desværre:

mmmmmmmmmm mmmmmmmmmm mmmmmmmmmm mmmmmmmmmm
iiiiiiiiii iiiiiiiiii iiiiiiiiii iiiiiiiiii

hvis du tæller M'er og i'er i linierne ovenover vil du opdage at der er præcis lige mange. Så hvis du blot deler en tekst udfra antal-tegn risikerer du en decideret skæv opdeling. Det vil ofte gå godt, og jo større klumper teksten opdeles i jo større er chancen for en 'god' opdeling. men det kan altid gå hen og gå galt, som i linierne ovenfor.

For virkelig at opdele 'sikkert' skal hele teksten tegnes af brugerens browser i een høj kolonne og så deles efter den midterste linie. Det er det tekst-editorer gør, men det er decideret besværligt at gøre i en browser. Og det skal være brovseren. hvis brugeren ikke har den font du specificerer vil hans browser bruge en anden, der måske ikke har samme proportioner på bogstaverne.

Og udover bogstavernes forskellige bredder bliver opdelingen også påvirket af ordenes gennemsnitlige længde og af kolonnernes bredde. Hvis brugeren ændrer sin fontsize kan resultatet blive et helt andet.

Du kan komme nogenlunnde godt fra det med forslagene ovenfor. men de er ikke sikre.

mvh JakobA
Avatar billede tipsen Nybegynder
01. maj 2003 - 15:26 #7
Et andet forslag:

<?php
$wraptext = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.';
$wrapstring = ' ';
$wrappoint = strrpos(substr($wraptext, 0, strlen($wraptext)/2), $wrapstring);
?>
<table>
  <tr>
      <td valign="top"><?php echo substr($wraptext, 0, $wrappoint-1);?></td>
      <td valign="top"><?php echo substr($wraptext, $wrappoint+1);?></td>
  </tr>
</table>
Avatar billede tipsen Nybegynder
01. maj 2003 - 15:27 #8
Jakoba: Der findes vel ikke nogen løsning til det problem du nævner - med mindre man vil forsøge sig med en individuel vægtning af bogstaverne - jeg forsøgte at finde en løsning i ren CSS, dog uden held.
Avatar billede tipsen Nybegynder
01. maj 2003 - 15:29 #9
NB: Antagelsen om at bogstaverne har en nogenlunde fornuftig fordeling på tværs af "midten" er vel heller ikke helt urealistisk - dermed mener jeg at resultatet sjældent vil blive helt dårligt!
Avatar billede jakoba Nybegynder
01. maj 2003 - 15:49 #10
Enig. som oftest går det nogenlinde.
Avatar billede vitin.fo Nybegynder
01. maj 2003 - 15:51 #11
jeg skal bruge funktionen til at lave tablen med 2 kolonner, så nyheden kommer til at ligne et avisudklip, frem for en lang bred teks, og en anelse sværere at læse.

Så det gør ikke noget om mere en halvdelen ligge i første kolonne. Heller end gerne fordel 60%/40%
Avatar billede vitin.fo Nybegynder
01. maj 2003 - 15:58 #12
tipsen>> Jeg prøve din funktion, men det røg et "i" ud af teksten der hvor den splittede.
Avatar billede jakoba Nybegynder
01. maj 2003 - 15:59 #13
der skal ikke trækkes een fra i første <td linie
Avatar billede schaefner Juniormester
01. maj 2003 - 16:02 #14
<?php
$text = "Moget tekst";
$newtext = wordwrap($text,strlen($text)/2,"\n");
$arr = explode("\n", $newtext);
?>

<table width="100%" border="1"><tr>
<td width="50%"><?php echo "$arr[0]"; ?></td>
<td width="50%"><?php echo "$arr[1] $arr[2]"; ?></td>
</tr></table>

så burde den virke uden problemer.
Avatar billede schaefner Juniormester
01. maj 2003 - 16:55 #15
Avatar billede vitin.fo Nybegynder
01. maj 2003 - 16:56 #16
tipsen >> Jeg kunne godt tænke mig at arbejde videre med din funktion, kan du hjælpe mig med at der kommer mere tekst i kolonne 1?
Avatar billede schaefner Juniormester
01. maj 2003 - 17:06 #17
vitin.fo >> Sådan? http://disneyzone.dk/split.php
Avatar billede vitin.fo Nybegynder
01. maj 2003 - 17:17 #18
schaefner>> ja. lige præsic:-)
jeg har dog lidt problemer med at køre din kode:
"Parse error: parse error in /TEST2news.php on line 2"
Avatar billede schaefner Juniormester
01. maj 2003 - 17:18 #19
Har du kopieret fra siden?
Avatar billede schaefner Juniormester
01. maj 2003 - 17:20 #20
<?php
$text = "Lorem Ipsum...";
$arr = explode("##", wordwrap($text,ceil(strlen($text)/5),"##"));
?>

<table width="100%" border="0" cellspacing="8"><tr>
<td width="50%" valign="top"><?php echo "$arr[0] $arr[1] $arr[2]"; ?></td>
<td width="50%" valign="top"><?php echo "$arr[3] $arr[4]"; ?></td>
</tr></table>

Du iøvrigt flytte rundt på det de forskellige elementer i array'et:

"$arr[0] $arr[1] $arr[2] $arr[3] $arr[4]" alt efter hvilken celle du ønsker mest tekst i.
Avatar billede tipsen Nybegynder
01. maj 2003 - 17:26 #21
<?php
$wraptext = 'Bare brug den latinske brødtekst fra før!';
$wrapstring = ' ';  //Hvilken karakter skal der brydes på
$wrapweight = 0.55;  //Hvor stor en del af teksten skal ligge i første kolonne
$wrappoint = strrpos(substr($wraptext, 0, (int) ($wrapweight*strlen($wraptext))), $wrapstring);
?>
<table width="100%">
  <tr>
      <td valign="top" width="50%"><?php echo substr($wraptext, 0, $wrappoint+1);?></td>
      <td valign="top" width="50%"><?php echo substr($wraptext, $wrappoint+1);?></td>
  </tr>
</table>
Avatar billede schaefner Juniormester
01. maj 2003 - 17:35 #22
tipsen >> nice ;)
Avatar billede vitin.fo Nybegynder
01. maj 2003 - 17:40 #23
tipsen>> jeg får en:
parse error in /TESTnews.php on line:
$wrapweight = 0.55;  //Hvor stor en del af teksten skal ligge i første kolonne
Avatar billede tipsen Nybegynder
01. maj 2003 - 17:42 #24
schaefner: Synes faktisk ikke selv det er en særlig god løsning - netop pga. det problem jakoba nævnte - det burde være muligt at løse 100% "korrekt" vha. CSS!

Et andet problem er også, at der kun kan splittes på én karakter - det ville også være oplagt eks. at splitte på '. ' - dvs. slutningen af en sætning!

Det kan også give problemer, hvis der er html-koder i den tekst man forsøger at splitte.
Avatar billede tipsen Nybegynder
01. maj 2003 - 17:43 #25
vitin: Det gør jeg ikke... - kig evt. på linien ovenover og se om du har afsluttet med ;
Avatar billede vitin.fo Nybegynder
02. maj 2003 - 11:16 #26
tipsen>> jeg kan ikke få det til at virker med 0.55 eller noget andet
så jeg bruger dit eks. fra 01/05-2003 15:26:07
se her:
http://www.vitin.fo/?P=news&newsID=20030501180930&newsLang=fo&newsCat=1
Avatar billede vitin.fo Nybegynder
02. maj 2003 - 11:19 #27
jakoba >> jeg er helt enig, men jeg er villig til at gå på kompromi, og selv syntes jeg det er blevet bedre end den brede tekst vi havde før.

Netscape have vist en gang en gang et tag til at bestemme hvor mange kolonner man vil have sin tekst i en tabel. Desværre blev det ikke standart HTML.
Avatar billede tipsen Nybegynder
02. maj 2003 - 21:15 #28
vitin: Jeg forstår ikke, hvad problemet kan være - jeg kan copy/paste min kodestump direkte ind i et nyt php-script og det fungerer uden problemer - og der er ikke en fejl i linien med "$wrapweight = 0.55;" hvilket leder mig til at tro, at du har lavet en fejl inden den linie.
Avatar billede vitin.fo Nybegynder
03. maj 2003 - 14:15 #29
tipsen>> jeg har også pasted din kode ind, og ingen fejl på de forudgående linier.
kan det være et server prob?
Avatar billede tipsen Nybegynder
03. maj 2003 - 15:32 #30
Ikke umiddelbart - de streng-funktioner der benyttes er alle meget almindelige.
Avatar billede vitin.fo Nybegynder
05. maj 2003 - 09:20 #31
På : http://www.vitin.fo/comp/tests.php får jeg denne fejl
>> Parse error: parse error in /var/www/vitin.fo/comp/tests.php on line 10 <<

Koden er:
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<?php
$wraptext = 'Bare brug den latinske brødtekst fra før!';
$wrapstring = ' ';  //Hvilken karakter skal der brydes på
$wrapweight = 0.55;  //Hvor stor en del af teksten skal ligge i første kolonne
$wrappoint = strrpos(substr($wraptext, 0, (int) ($wrapweight*strlen($wraptext))), $wrapstring);
?>
<table width="100%">
  <tr>
      <td valign="top" width="50%"><?php echo substr($wraptext, 0, $wrappoint+1);?></td>
      <td valign="top" width="50%"><?php echo substr($wraptext, $wrappoint+1);?></td>
  </tr>
</table>
</body>
</html>
Avatar billede tipsen Nybegynder
05. maj 2003 - 10:22 #32
Prøv:

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<?php
$wraptext = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.';
$wrapstring = ' ';
$wrapweight = 0.55;
$wrappoint = strrpos(substr($wraptext, 0, (int) ($wrapweight*strlen($wraptext))), $wrapstring);
?>
<table width="100%">
  <tr>
      <td valign="top" width="50%"><?php echo substr($wraptext, 0, $wrappoint+1);?></td>
      <td valign="top" width="50%"><?php echo substr($wraptext, $wrappoint+1);?></td>
  </tr>
</table>
</body>
</html>
Avatar billede vitin.fo Nybegynder
05. maj 2003 - 10:48 #33
tipsen>> desværre, no luck.
men igen det er ok, jeg har fået dit første script til at virker og også schaefner script fra 01/05-2003 17:20:25.
Avatar billede tipsen Nybegynder
05. maj 2003 - 11:50 #34
Meget mystisk...

Hvad med:

$wrapweight = 1/2;

?
Avatar billede vitin.fo Nybegynder
05. maj 2003 - 12:29 #35
jo det virker fint, også med f.eks: 5/9
Avatar billede tipsen Nybegynder
05. maj 2003 - 12:34 #36
Så er det jo bare at bruge:

55/100

:-)

PS: Eller måske $wrapweight = floatval('0.55');
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester