webForumDet fria alternativet

Räkna antal tecken i en sträng

PHP

20 svar · 854 visningar · startad av peronet

Medlem sedan sep. 200193 inlägg
Frågan#1

Hur får jag reda på hur många tecken följande sträng innehåller?
$string = "jag heter olle och är 7 år gammal";

Medlem sedan feb. 20002 612 inlägg
#2

strlen

Medlem sedan sep. 200193 inlägg
#3

danke. hittade det precis.. :)

tack =)

Medlem sedan sep. 200193 inlägg
#4

en fråga till...

for ($j=1;$j <=$antal;$j++) {

$sender = explode(";", $amne[$j]);
if ($sender) {
$temp = strlen($sender);
print "<B>TEMP: </B> $temp <BR>";
print "<B>Sender: </B> $sender[0] <BR>";
print "<B>Ämne: </B> $amne[$j] <BR>";
print "<B>Datum:</B> $datum[$j] <BR>";
print "<B>Från: </B> $from[$j] <BR>";
print "<B>Till: </B> $till[$j] <BR><BR>";
print "$mailet[$j]";
print "<BR><BR><BR>";
}

ger...:

TEMP: 5
Sender: SENDER=TEST
Ämne: SENDER=TEST; MESSAGE=hejsan hoppsan svejsan :)
Datum: Wed, 15 May 2002 18:00:58 +0200
Från: sven@hotmail.com
Till: "Persson, Johan"

0046736762015

det stämmer inte.. 5 ska det inte vara, inte med min huvudräkning i alla fall.. :)

Kan ju dock vara som så att jag är trött.. men .. så trött?
"SENDER=TEST" måste ju vara mer än 5 bokstäver långt.. "tycka"

Medlem sedan mars 20007 896 inlägg
#5

Du kollar ju mot själva arrayen, inte mot ett element. :)
Det stämmer, då arrayen har totalt 5 element. Lägg till [ 0 ] efter så ska det funka som du vill. :)

Medlem sedan apr. 2002830 inlägg
#6

eller så börjar du bara loopen med 0 istället för 1... eller missade jag ngt?

Medlem sedan sep. 200193 inlägg
#7

...$sender = explode(";", $amne[$j]);
if ($sender) {
$temp = strlen($sender);
.....

Börja med 0 istället för 1 ??
Jag vill bara ha ut antal tecken i strängen $sender
och det är väl ingen array?

Vilka är de fem elementen om det nu skulle vara en array?

snälla hjälp mig, jag blir galen... :(

Medlem sedan aug. 20002 975 inlägg
#8

$sender ÄR en array. Funktionen explode delar upp en sträng i en array. Array-elementen skiljs åt med ";". Exempel:

$strang = "A;B;C";

$enArray = explode(";", $strang);
// ger samma resultat som:
$enArray = array("A", "B", "C");

Ta en titt i manualen http://www.php.net/manual/en/function.explode.php

strlen($sender) returnerar i det här fallet antalet tecken i ordet "Array". Jämför med: echo $sender.

Medlem sedan mars 20007 896 inlägg
#9

Vad är det du vill kontrollera? Ämnesraden?

$sender = explode(";", $amne[$j]);
if ($sender) {
$temp = strlen($sender[ 0 ]);

strlen($sender) returnerar i det här fallet antalet tecken i ordet "Array". Jämför med: echo $sender.

Så är det ja, såklart. :)

Medlem sedan sep. 200193 inlägg
#10

Det jag slutligen vill göra är att dela upp ämnes raden enligt:
Ämne: SENDER=TEST; MESSAGE=hejsan hoppsan svejsan
så att det blir:
$sender = "TEST";
$message= "hejsan hoppsan svejsan";

hur görs detta smidigast?

Jag vill alltså inte ha det:
$sender = "SENDER="TEST"";
$message = "MESSAGE="hejsan hoppsan svejsan"";

om ni förstår

Medlem sedan mars 20007 896 inlägg
#11

Du får du lägga till ett par rader:

$tmpArray = explode ( ";", $amne[ $j ] );
$sender = trim ( $tmpArray[ 0 ] );
$message = trim ( $tmpArray[ 1 ] );
$tempSender = strlen ( $sender );
$tempMessage = strlen ( $message );
Medlem sedan sep. 200193 inlägg
#12

Testar detta..

:)

Medlem sedan sep. 200193 inlägg
#13

$tmpArray = explode ( ";", $amne[ $j ] );
$sender = trim ( $tmpArray[ 0 ] );
$message = trim ( $tmpArray[ 1 ] );
$tempSender = strlen ( $sender );
$tempMessage = strlen ( $message );

print "<B>TEMP1: </B> $tempSender <BR>";
print "<B>TEMP2: </B> $tempMessage <BR>";

print "<B>TEMP: </B> $temp <BR>";
print "<B>Sender: </B> $sender[0] <BR>";
print "<B>Ämne: </B> $amne[$j] <BR>";
print "<B>Datum:</B> $datum[$j] <BR>";
print "<B>Från: </B> $from[$j] <BR>";
print "<B>Till: </B> $till[$j] <BR><BR>";
print "$mailet[$j]";
print "<BR><BR><BR>";

ger...

TEMP1: 13
TEMP2: 30
TEMP: 13
Sender: S
Ämne: SENDER=TESTAR; MESSAGE=hejsan hoppsan svejsan;
Datum: Thu, 16 May 2002 11:25:17 +0200
Från: klas.knut@domain.se
Till: "Persson, Johan"

mail meddelandet

Medlem sedan aug. 20002 975 inlägg
#14

Prova det här:

$tmpArray = explode ( ";", $amne[ $j ] ); 
for ($i=0; $i<2; $i++){ 
  $tmpArray[$i] = explode("=", $tmpArray[$i]);
  $tmpArray[$i][0] = ltrim($tmpArray[$i][0]);
  ${strtolower($tmpArray[$i][0])} = $tmpArray[$i][1];
}

//Bara för test:
echo "Sender: $sender <br>";
echo "Message: $message <br>";

$tempSender = strlen ( $sender ); 
$tempMessage = strlen ( $message );

Observera: $sender är nu inte en array !!

Medlem sedan sep. 200193 inlägg
#15

$sender = explode(";", $amne[$j]);
$temp = strlen($sender[0]);

$tmpArray = explode ( ";", $amne[ $j ] );
for ($i=0; $i<2; $i++){
$tmpArray[$i] = explode("=", $tmpArray[$i]);
$tmpArray[$i][0] = ltrim($tmpArray[$i][0]);
${strtolower($tmpArray[$i][0])} = $tmpArray[$i][1];
}

//Bara för test:
echo "Sender: $sender <br>";
echo "Message: $message <br>";

$tempSender = strlen ( $sender );
$tempMessage = strlen ( $message );

print "<B>TEMP1: </B> $tempSender <BR>";
print "<B>TEMP2: </B> $tempMessage <BR>";

print "<B>TEMP: </B> $temp <BR>";
print "<B>Sender: </B> $sender[0] <BR>";
print "<B>Ämne: </B> $amne[$j] <BR>";
print "<B>Datum:</B> $datum[$j] <BR>";

ger...

Sender: HEJ
Message: hejsan svejsan massor
TEMP1: 3
TEMP2: 21
TEMP: 10
Sender: H
Ämne: SENDER=HEJ; MESSAGE=hejsan svejsan massor
Datum: Thu, 16 May 2002 13:24:30 +0200

hummm blev rätt.. :)

Medlem sedan sep. 200193 inlägg
#16

Kan någon förklara följande för mig?

Prova det här:

kod:--------------------------------------------------------------------------------$tmpArray = explode ( ";", $amne[ $j ] );
for ($i=0; $i<2; $i++){
$tmpArray[$i] = explode("=", $tmpArray[$i]);
$tmpArray[$i][0] = ltrim($tmpArray[$i][0]);
${strtolower($tmpArray[$i][0])} = $tmpArray[$i][1];
}

//Bara för test:
echo "Sender: $sender <br>";
echo "Message: $message <br>";

$tempSender = strlen ( $sender );
$tempMessage = strlen ( $message );

Medlem sedan aug. 20002 975 inlägg
#17

Det kanske man är skyldig att göra.

Vi tar det ett steg i taget både det du vet och eventuellt inte vet.

//Vi har ett array-element med följande sträng:
$amne[ $j ] = "SENDER=HEJ; MESSAGE=hejsan svejsan massor ";

$tmpArray = explode ( ";", $amne[ $j ] ); 
/* Lägger strängens innehåll i en array. Delar upp i array-element 
   efter semikolon(;). Arrayen ser efter explode ut så här:
   array ("SENDER=HEJ", " MESSAGE=hejsan svejsan massor ") */

for ($i=0; $i<2; $i++){ 
/* En räknare till våra två element. Tveksamt om det behövs, 
   men kan vara bra om man vill utöka till flera. */

$tmpArray[$i] = explode("=", $tmpArray[$i]);
/* Vi delar upp våra array-element i under-arrayer, delade med "=".
   Arrayen ser efter explode ut så här:
   array (array("SENDER", "HEJ"), array(" MESSAGE", "hejsan svejsan massor ") */

$tmpArray[$i][0] = ltrim($tmpArray[$i][0]);
/* Vi tar bort eventuella mellanslag i början på våra första-element
   i under arrayen. Arrayen ser efter ltrim ut så här:
   array (array("SENDER", "HEJ"), array("MESSAGE", "hejsan svejsan massor ") */

${strtolower($tmpArray[$i][0])} = $tmpArray[$i][1]; 
/* Här kommer det krångliga. Vi tittar på första elementet i $tmpArray.
   $tmpArray[$i][0] är första elementet i under-arrayen => "SENDER"
   strtolower($tmpArray[$i][0]) är samma sak som strtolower("SENDER"). Vi
   gör om det till små bokstäver. $tmpArray[$i][0] är nu "sender".
   ${strtolower($tmpArray[$i][0])} är samma sak som ${"sender"}. Detta är 
   något som kallas variabla variabler. Det kan man läsa mer om här:
   [url]http://www.php.net/manual/en/language.variables.variable.php[/url]
   Där står det att ${"sender"} är lika med $sender. Detta sätts 
   lika med under-arrayens andra element ("HEJ"). Med detta får vi variablerna
   $sender = "HEJ";
   $message = "hejsan svejsan massor ";  */

Nu är jag milt sagt en dålig pedagog, men om du läser igenom tillräckligt många gånger så hoppas jag du förstår vad jag försöker beskriva.

Medlem sedan sep. 200193 inlägg
#18

Jag bockar och bugar!

Det var en mycket bra beskrivning, jag förstod precis.

Och det bästa av allt är att mitt program börjar lida mot sitt slut, vilket innebär att jag snart ska släppa denna biten och gå på nästa =)

Tack 100000 gånger.

Medlem sedan juli 2002405 inlägg
#19

Vet inte om detta har med denna disskussion att göra men jag skulle veta hur man ska göra för att korta ner en text.. Ska man använda "strlen" då också.. Alltså om jag vill få ut en text från databasen (mysql) men bara visa de 20 första tecknen och inte hela..

Hur ska jag skriva då?

Medlem sedan aug. 20002 975 inlägg
#20

Enklast är väl att göra det direkt i SQL-frågan:

$sql = "SELECT LEFT(kolumnnamn, 20) AS kolumnnamn FROM tabell";

Annars om du vill göra det med PHP:

$short_string = substr($long_string, 0, 20);
263 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)