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";
Räkna antal tecken i en sträng
20 svar · 854 visningar · startad av peronet
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"
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. :)
eller så börjar du bara loopen med 0 istället för 1... eller missade jag ngt?
...$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... :(
$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.
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. :)
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
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 );
$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
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 !!
$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.. :)
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 );
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.
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.
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å?
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);
