Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Schleife +1

0 views
Skip to first unread message

Stefan Becker

unread,
Dec 15, 2009, 6:25:28 AM12/15/09
to
Hallo,

bei folgendem tritt auf, dass selbst wenn ich kein Wert �bergebe, dass Array
einmal durchlaufen wird. Wenn ich Werte �bergebe ist der Wert +1.

echo "Ausgabe vor dem Array: $empfaenger <br/>";
$empfaenger_array=explode(",",$empfaenger);

//Hier wird der die Empf�ngeranzahl angelegt
$smsempfaenger = 0;

foreach($empfaenger_array as $temp)
{
SMS_versenden("benutzername","kennwort",utf8_decode($smstext),$temp,$service,$Absender);
$smsempfaenger ++;
echo "Schleife";
}

echo "Bis hierher geht
es!<br/>$empfaenger<br/>$empfaenger_array<br/>$smsempfaenger";

Kann mir jemand das erkl�ren?

Stefan

Stefan Becker

unread,
Dec 15, 2009, 6:42:38 AM12/15/09
to
Kleiner Nachtrag:

Was macht explode wenn der String 9e9329,74e837, aussieht, wird dann ein 3
zeiliges Array angelegt? So sieht es n�mlich momentan mir danach aus...

Stefan

Christoph Herrmann

unread,
Dec 15, 2009, 7:07:58 AM12/15/09
to
Stefan Becker schrieb:

> Kleiner Nachtrag:
>
> Was macht explode wenn der String 9e9329,74e837, aussieht, wird dann ein
> 3 zeiliges Array angelegt? So sieht es n�mlich momentan mir danach aus...

Wieso testest du es nicht einfach?

Folgender Code:
<?php
$array = explode(",", "");
var_dump($array);


$array = explode(",", "1,2");
var_dump($array);


$array = explode(",", "1,2,");
var_dump($array);
?>


Folgende Ausgabe:
array
0 => string '' (length=0)

array
0 => string '1' (length=1)
1 => string '2' (length=1)

array
0 => string '1' (length=1)
1 => string '2' (length=1)
2 => string '' (length=0)

Das Array enth�lt immer Anzahl Trennzeichen + 1 Ergebnisse. Daher selbst
wenn kein Trennzeichen vorhanden ist oder gar ein leerer String hast ein
Element im Array (n�mlich den kompletten (leeren) String).

--
Mit freundlichen Gr��en,
Christoph Herrmann

http://dragonprojects.de/

Carsten Wiedmann

unread,
Dec 15, 2009, 7:08:50 AM12/15/09
to
Am 15.12.2009 12:42, schrieb Stefan Becker:
>> bei folgendem tritt auf, dass selbst wenn ich kein Wert übergebe, dass
>> Array einmal durchlaufen wird. Wenn ich Werte übergebe ist der Wert +1.

>>
>> echo "Ausgabe vor dem Array: $empfaenger <br/>";
>> $empfaenger_array=explode(",",$empfaenger);
>>
>> //Hier wird der die Empfängeranzahl angelegt

>> $smsempfaenger = 0;
>>
>> foreach($empfaenger_array as $temp)
>> {
> Kleiner Nachtrag:
>
> Was macht explode wenn der String 9e9329,74e837, aussieht, wird dann ein
> 3 zeiliges Array angelegt? So sieht es nämlich momentan mir danach aus...

Wie du es ja schon bemerkt hast, wird für jedes Komma ein neuer Array-Key
angelegt, und wenn bis zum nächsten Komma (oder Stringende) nichts ist, dann
mit einem leeren Value. Das Selbe auch bei einem ganz leeren String, wo es
dann nur einen Key mit leeren Value gibt.

Man könnte jetzt natürlich "," am Ende abschneiden und dann noch testen, ob
das Array aus nur einem leeren Key besteht. Aber ich denke das ist einfacher
(und berücksichtigt auch "9e9329,,74e837,"):

>> foreach($empfaenger_array as $temp)
>> {
| if (empty($temp)) continue;

Gruß
Carsten

Sam Kang

unread,
Dec 15, 2009, 7:08:46 AM12/15/09
to
Stefan Becker schrieb:

> echo "Ausgabe vor dem Array: $empfaenger <br/>";
> $empfaenger_array=explode(",",$empfaenger);

> foreach($empfaenger_array as $temp)
> {

> Kann mir jemand das erkl�ren?

explode() gibt bei einem leerem String ein Array mit einen leerem String
zur�ck. Daher wird genau einmal mit leerem String in $empfaenger_array[0]
ausgef�hrt:

foreach ($empfaenger_array as $temp)

ausgef�hrt. Teste ob $empfaenger etwas sinnvolles enth�lt.

Sam.


--
Sufficiently advanced incompetence is indistinguishable from malice
(J. Porter Clark)

Sam Kang

unread,
Dec 15, 2009, 7:13:59 AM12/15/09
to
Stefan Becker schrieb:

> Kleiner Nachtrag:
>
> Was macht explode wenn der String 9e9329,74e837, aussieht, wird dann ein 3
> zeiliges Array angelegt? So sieht es n�mlich momentan mir danach aus...

Ist v�llig richtig.

$a=explode(',','9e9329,74e837,');

var_dump($a);
..
array
0 => string '9e9329' (length=6)
1 => string '74e837' (length=6)
2 => string '' (length=0)


var_dump($a) sagt dir genau was drin ist. Oder nimm einen Debugger.

Sam

Stefan Becker

unread,
Dec 15, 2009, 8:36:09 AM12/15/09
to

"Carsten Wiedmann" <carste...@gmx.de> schrieb im Newsbeitrag
news:4b277c4a$0$6557$9b4e...@newsspool4.arcor-online.net...

> Wie du es ja schon bemerkt hast, wird fᅵr jedes Komma ein neuer Array-Key
> angelegt, und wenn bis zum nᅵchsten Komma (oder Stringende) nichts ist,

> dann
> mit einem leeren Value. Das Selbe auch bei einem ganz leeren String, wo es
> dann nur einen Key mit leeren Value gibt.
>

> | if (empty($temp)) continue;
>

Ich habe jetzt mal einen dump des arrays gemacht und siehe da, hier haben
wir was:
array(2) { [0]=> string(13) " 0123/456789" [1]=> string(1) " " }

Ich lese die Daten aus einer Textdatei, ich glaube schon fast, es kᅵnnte dar
Zeilenumbruch sein?!

Ich habe dann versucht mit einer If-Abfrage abzufangen, aber das klappt
nicht:

foreach($empfaenger_array as $temp)
{
if(!(empty($temp) || $temp="")){
SMS_versenden("kundennummer","kennwort",utf8_decode($smstext),$temp,$service,$Absender);
$smsempfaenger ++;
echo "Schleife+$temp+";
}
}

Wie kann ich es sonst abfangen?

Stefan

Werner Flamme

unread,
Dec 15, 2009, 9:16:38 AM12/15/09
to
Stefan Becker [15.12.2009 14:36]:

>
>
> Ich habe jetzt mal einen dump des arrays gemacht und siehe da, hier haben
> wir was:
> array(2) { [0]=> string(13) " 0123/456789" [1]=> string(1) " " }

> if(!(empty($temp) || $temp="")){

> Wie kann ich es sonst abfangen?

Vielleicht durch $temp == " "?

a) ist $temp nicht "" (String mit Lᅵnge 0), sondern " " (String mit
Lᅵnge 1, enthᅵlt 1 nicht druckbares Zeichen)
b) $temp="" weist $temp den Wert "" zu, es ist kein Vergleich

HTH
Werner

Carsten Wiedmann

unread,
Dec 15, 2009, 9:30:36 AM12/15/09
to
Am 15.12.2009 14:36, schrieb Stefan Becker:
>> | if (empty($temp)) continue;
>>
>
> Ich habe jetzt mal einen dump des arrays gemacht und siehe da, hier
> haben wir was:
> array(2) { [0]=> string(13) " 0123/456789" [1]=> string(1) " " }

Ich würde mal sagen, da hängt jeweils ein "\r" hintendran, und einmal noch
ein Leerzeichen vorne.


> foreach($empfaenger_array as $temp)
> {
> if(!(empty($temp) || $temp="")){

| $temp = trim($temp);
| if (empty($temp)) continue;

Gruß,
Carsten


Sebastian Neubert

unread,
Dec 15, 2009, 9:40:35 AM12/15/09
to
Stefan Becker schrieb:

> Ich habe dann versucht mit einer If-Abfrage abzufangen, aber das klappt
> nicht:
>
> Wie kann ich es sonst abfangen?

Kennst du:
http://de3.php.net/trim

Viele Grᅵᅵe,
Sebastian

Ulf [Kado] Kadner

unread,
Dec 15, 2009, 10:49:49 AM12/15/09
to
Hallo Stefan Becker! Du schriebst:

> Ich habe jetzt mal einen dump des arrays gemacht und siehe da, hier
> haben wir was:
> array(2) { [0]=> string(13) " 0123/456789" [1]=> string(1) " " }

Mach einfach folgendes:

$empfaenger_array = explode(
',',
rtrim(
',',
rtrim($empfaenger, "\r\n\t \0")
)
);

Das erspart Dir das Du bei jedem Durchlauf der Schleife prüfen must.

Die 2 rtrim() sind nötig da Du sonst u.U. Zeichen entfernst die garnicht
entfert werden sollen. (z.B. trim wär hier fehl am Platze)

MfG, Ulf

--
Die einzige Methode, gesund zu bleiben, besteht darin, zu essen, was
man nicht mag, zu trinken, was man verabscheut, und zu tun, was man
lieber nicht täte [Mark Twain]

Ulf [Kado] Kadner

unread,
Dec 15, 2009, 10:52:54 AM12/15/09
to
Hallo Ulf [Kado] Kadner! Du schriebst:

> Hallo Stefan Becker! Du schriebst:
>
>> Ich habe jetzt mal einen dump des arrays gemacht und siehe da, hier
>> haben wir was:
>> array(2) { [0]=> string(13) " 0123/456789" [1]=> string(1) " " }
>
> Mach einfach folgendes:
>
> $empfaenger_array = explode(
> ',',
> rtrim(
> ',',
> rtrim($empfaenger, "\r\n\t \0")
> )
> );

Grr.. Muss natürlich so heissen:

$empfaenger_array = explode(
',',
rtrim(

rtrim($empfaenger, "\r\n\t \0"),
','
)
);

MfG, Ulf

--
Es würde gegen meine Programmierung verstoßen, eine Gottheit
zu personifizieren. [C-3PO]

Michael Fesser

unread,
Dec 15, 2009, 1:35:00 PM12/15/09
to
.oO(Ulf [Kado] Kadner)

>Hallo Stefan Becker! Du schriebst:
>
>> Ich habe jetzt mal einen dump des arrays gemacht und siehe da, hier
>> haben wir was:
>> array(2) { [0]=> string(13) " 0123/456789" [1]=> string(1) " " }
>
>Mach einfach folgendes:
>
>$empfaenger_array = explode(
> ',',
> rtrim(
> ',',
> rtrim($empfaenger, "\r\n\t \0")
> )
>);

>[...]

Eine Alternative w�re preg_split() mit gesetztem PREG_SPLIT_NO_EMPTY-
Flag.

Micha

0 new messages