foreach($a as $b): $b verändern
Hallo.
Ich würde gerne folgendes machen:
--------------------------
$a = array("a", "b");
foreach($a as$b) {
$b .= "ADDED";
}
--------------------------
Es soll also nachher $a = array("aADDED", "bADDED") sein. Die oben
angegebene Methode scheint allerdings ncihtzu funktionieren. Wie kann
ich dem jeweils behandelten String etwas hinzufügen?
MfG
Christian
Re: foreach($a as $b): $b verändern
Christian Bruckhoff schrieb:
> Ich würde gerne folgendes machen:
>
> --------------------------
>
> $a = array("a", "b");
>
> foreach($a as$b) {
> $b .= "ADDED";
> }
>
> --------------------------
>
> Es soll also nachher $a = array("aADDED", "bADDED") sein. Die oben
> angegebene Methode scheint allerdings ncihtzu funktionieren. Wie kann
> ich dem jeweils behandelten String etwas hinzufügen?
$a = array("a", "b");
foreach($a as $key => $value) {
$a[$key] .= "ADDED";
}
Ich würde es so machen. Gibt aber auch performantere Lösungen. Das
Problem liegt im übrigen darin, dass $key und $value nur Kopien sind der
Arraywerte, daher bringt es nichts, diese zu ändern.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: foreach($a as $b): $b verändern
Christian Bruckhoff schrieb:
> Es soll also nachher $a = array("aADDED", "bADDED") sein. Die oben
> angegebene Methode scheint allerdings ncihtzu funktionieren. Wie kann
> ich dem jeweils behandelten String etwas hinzufügen?
Du kannst in foreach Referenzen benutzen:
----------------v
| foreach($a as &$b) {
| $b .= "ADDED";
| }
Das dürfte tun was du willst, kann sich aber teilweise tückisch
verhalten. Wenn du solch ein Konstrukt verwenden willst, stelle sicher
dass $b im aktuellen Scope noch nicht deklariert ist, ansonsten wird
diese Variable unter Umständen so überschrieben, dass du dir ins Knie
schießt. Dazu gab es hier vor einiger Zeit mal einen Thread...
Re: foreach($a as $b): $b verändern
Christian Bruckhoff wrote:
> Ich würde gerne folgendes machen:
>
> $a = array("a", "b");
>
> foreach($a as$b) {
> $b .= "ADDED";
> }
Neben den bereits angesprochenen Referenzen kannst Du auch ganz auf
foreach verzichten und statt dessen mit for() durch Array iterieren. Das
dürchte dann die schnellste Variante sein.
for ($i=0; $i<sizeof($a); $i++) {
$a[$i] .= 'ADDED';
}
MfG, Ulf
--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Re: foreach($a as $b): $b verändern
Ulf Kadner schrieb:
> Neben den bereits angesprochenen Referenzen kannst Du auch ganz auf
> foreach verzichten und statt dessen mit for() durch Array iterieren. Das
> dürchte dann die schnellste Variante sein.
>
> for ($i=0; $i<sizeof($a); $i++) {
> $a[$i] .= 'ADDED';
> }
$size = sizeof($a);
for ($i = 0; $i < $size; ++$i) {
$a[$i] .= 'ADDED';
}
- Wenn man die Größe des Arrays vorher ermittelt, muss man diese nicht
bei jeder Überprüfung selbst ermitteln.
- Präinkrement sollte auch in PHP etwas schneller sein als der
Postinkrement.
Das dürfte dann aber glaub die schnellste Variante sein. :) Allerdings
finde ich einen foreach leserlicher als dies mit for zu durchlaufen und
die absoluten Performanceunterschiede sollten sehr gering sein.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: foreach($a as $b): $b verändern
Ulf Kadner schrieb:
> Christian Bruckhoff wrote:
>
>> foreach($a as$b) {
>> $b .= "ADDED";
>> }
>
> Neben den bereits angesprochenen Referenzen kannst Du auch ganz auf
> foreach verzichten und statt dessen mit for() durch Array iterieren. Das
> dürchte dann die schnellste Variante sein.
>
> for ($i=0; $i<sizeof($a); $i++) {
> $a[$i] .= 'ADDED';
> }
In diesem Fall ja. Trotzdem würde ich foreach generell vorziehen, da es
wesentlich flexibler ist und auch noch bei assoziativen Arrays funktioniert.
Gruß. Claus
Re: foreach($a as $b): $b verändern
On Thu, 04 Oct 2007 15:20:43 +0200, Christian Bruckhoff wrote:
> $a = array("a", "b");
>
> foreach($a as$b) {
> $b .= "ADDED";
> }
$a = array("a", "b");
foreach($a as &$b) {
$b .= "ADDED";
}
Gruß,
Matthias
Re: foreach($a as $b): $b verändern
Christoph Herrmann wrote:
> $size = sizeof($a);
> for ($i = 0; $i < $size; ++$i) {
> $a[$i] .= 'ADDED';
> }
for ($i=0, $s=sizeof($a); $i<$s; ++$i) {
$a[$i] .= 'ADDED';
}
;-)
> - Präinkrement sollte auch in PHP etwas schneller sein als der
> Postinkrement.
ja. Postincrement nutze ich dazu eigentlich auch im Normalfall nicht.
Mein Template in der IDE machts auch mit Preincrement, nur gibts das
nicht im Newsreader und ich vergaß es. Du hast damit natürlich recht.
> Das dürfte dann aber glaub die schnellste Variante sein. :) Allerdings
> finde ich einen foreach leserlicher als dies mit for zu durchlaufen und
> die absoluten Performanceunterschiede sollten sehr gering sein.
Das kommt letztendlich auf die Datenmangen an. Arrays werden in foreach
bei zunehmender größe recht fix "unperformater". (Ist mein eigenes
Testergebnis, das aber nirgendwo im Netz belegt ist.)
MfG, Ulf
--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Re: foreach($a as $b): $b verändern
Also sprach Christoph Herrmann:
>> for ($i=0; $i<sizeof($a); $i++) {
>> $a[$i] .= 'ADDED';
>> }
> $size = sizeof($a);
> for ($i = 0; $i < $size; ++$i) {
> $a[$i] .= 'ADDED';
> }
Wenn das Array auch rückwärts durchlaufen werden darf:
for ( $i = count( $a ); $i--; )
{
$a[$i] .= 'ADDED';
}
Gruß,
Thomas
Re: foreach($a as $b): $b verändern
Also sprach Christoph Herrmann:
> - Präinkrement sollte auch in PHP etwas schneller sein als der
> Postinkrement.
Hast Du dazu genauere Infos?
Gruß,
Thomas
Re: foreach($a as $b): $b verändern
Am Thu, 4 Oct 2007 21:13:58 +0200 schrieb Thomas Mlynarczyk:
> Also sprach Christoph Herrmann:
>
>> - Präinkrement sollte auch in PHP etwas schneller sein als der
>> Postinkrement.
>
> Hast Du dazu genauere Infos?
Zumidest in C ist es so, daß der Pre(in|de)krement schneller ist, weil
einfach direkt der Wert weiterwertet wird, und nicht der alte Wert
zusätzlich gespeichert werden muss.
Genaueres dazu findet man in jedem _besseren_ C Tutorial.
HTH
Norbert
Re: foreach($a as $b): $b verändern
Thomas Mlynarczyk schrieb:
> Also sprach Christoph Herrmann:
>
>> - Präinkrement sollte auch in PHP etwas schneller sein als der
>> Postinkrement.
>
> Hast Du dazu genauere Infos?
nicht was PHP in den einzelnen Versionen betrifft.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: foreach($a as $b): $b verändern
Also sprach Norbert Melzer:
> Zumidest in C ist es so, daß der Pre(in|de)krement schneller ist, weil
> einfach direkt der Wert weiterwertet wird, und nicht der alte Wert
> zusätzlich gespeichert werden muss.
Klingt logisch. Danke. Ich sollte also, wenn möglich, dem Pre(in|de)krement
immer den Vorzug geben.
Wieder was gelernt :-)
Gruß,
Thomas
Re: foreach($a as $b): $b verändern
Ulf Kadner schrieb:
> for ($i=0; $i<sizeof($a); $i++) {
Auch, wenn es technisch "Jacke wie Hose" ist, finde ich es logischer,
anstatt sizeof($a), count($a) zu verwenden.
Martin
Re: foreach($a as $b): $b verändern
Martin Lemke wrote:
> Auch, wenn es technisch "Jacke wie Hose" ist, finde ich es logischer,
> anstatt sizeof($a), count($a) zu verwenden.
Ich wiederum garnicht. count() kommt in meinem Sourcecodes zu 100% nicht
vor. Außerdem finde ich den Namen schlüssiger. PHP gibt jedem das seine
halt. ;-)
MfG, Ulf
--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Re: foreach($a as $b): $b verändern
Martin Lemke schrieb:
> Ulf Kadner schrieb:
>
>> for ($i=3D0; $i<sizeof($a); $i++) {
>
> Auch, wenn es technisch "Jacke wie Hose" ist, finde ich es logischer,
> anstatt sizeof($a), count($a) zu verwenden.
Sehe ich auch so. Für mich impliziert sizeof() irgendwie den
Speicherbedarf (size of element in bytes) und nicht die Anzahl der
Elemente. =DCber dieses blöde[tm] Synonym für count() ärgere ich mi=
ch
deshalb immer wieder.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: foreach($a as $b): $b verändern
Ulf Kadner schrieb:
> Martin Lemke wrote:
>
>> Auch, wenn es technisch "Jacke wie Hose" ist, finde ich es logischer,
>> anstatt sizeof($a), count($a) zu verwenden.
>
> Ich wiederum garnicht. count() kommt in meinem Sourcecodes zu 100% nicht
> vor. Außerdem finde ich den Namen schlüssiger.
Das wiederum finde ich nun gar nicht.
Bei sizeof() erwarte ich die "Größe von" irgendetwas (in Bytes), so wie
es bei dem gleichnamigen C-Operator (nicht Funktion!) der Fall ist. Bei
count() hingegen verrät mir schon der Name, dass ich hier eine "Anzahl"
bekomme.
sizeof() kommt in meinen PHP-Sourcecodes deshalb auch gar nicht vor.
Zumal ich bis gerade eben gar nicht wusste, dass dies in PHP lediglich
ein Synonym für count ist.
Gruß. Claus
Re: foreach($a as $b): $b verändern
Claus Reibenstein wrote:
> Ulf Kadner schrieb:
>> Ich wiederum garnicht. count() kommt in meinem Sourcecodes zu 100% nicht
>> vor. Außerdem finde ich den Namen schlüssiger.
>
> Das wiederum finde ich nun gar nicht.
ist halt Geschmackssache.
> Bei sizeof() erwarte ich die "Größe von" irgendetwas (in Bytes), so wie
> es bei dem gleichnamigen C-Operator (nicht Funktion!) der Fall ist.
klar wenn man viel mit C macht mag das zutreffen. Ist bei mir aber nicht
der Fall, daher assoziiere ich das wohl anders wie Du.
MfG, Ulf
--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Re: foreach($a as $b): $b verändern
"Christian Bruckhoff" <brchrist [at] uni-koblenz.de> schrieb
> $a = array("a", "b");
>
> foreach($a as$b) {
> $b .= "ADDED";
> }
Für sowas kann man die Funktion array_walk() ganz gut nutzen. Solltest du
dir mal im PHP Manuel angucken.
mfg Xion
Re: foreach($a as $b): $b verändern
Christian Franzen schrieb:
> "Christian Bruckhoff" <brchrist [at] uni-koblenz.de> schrieb
>> $a = array("a", "b");
>>
>> foreach($a as$b) {
>> $b .= "ADDED";
>> }
>
> Für sowas kann man die Funktion array_walk() ganz gut nutzen. Solltest du
> dir mal im PHP Manuel angucken.
Wer ist dieser Manuel und wo kann man ihn finden?
SCNR,
Daniel
Re: foreach($a as $b): $b verändern
Daniel Fett schrieb:
> Wer ist dieser Manuel und wo kann man ihn finden?
ernst gemeinte Frage? Manuel ist Englisch und heißt Handbuch...
Für PHP: www.php.net
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: foreach($a as $b): $b verändern
Christoph Herrmann schrieb:
> Daniel Fett schrieb:
>> Wer ist dieser Manuel und wo kann man ihn finden?
>
> ernst gemeinte Frage? Manuel ist Englisch und heißt Handbuch...
> Für PHP: www.php.net
Nicht wirklich. Unter der ganannten Adresse befindet sich das Manu_a_l.
Manu_e_l hingegen ist ein wahrscheinlich aus dem Alt-Hebräischen
stammender Männername.
;-)
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: foreach($a as $b): $b verändern
Niels Braczek schrieb:
> Christoph Herrmann schrieb:
>> Daniel Fett schrieb:
>>> Wer ist dieser Manuel und wo kann man ihn finden?
>> ernst gemeinte Frage? Manuel ist Englisch und heißt Handbuch...
>> Für PHP: www.php.net
>
> Nicht wirklich. Unter der ganannten Adresse befindet sich das Manu_a_l.
> Manu_e_l hingegen ist ein wahrscheinlich aus dem Alt-Hebräischen
> stammender Männername.
Eben. Und vom Manuel liest man leider ziemlich oft, besonders
hierzugroups...
Daniel
Re: foreach($a as $b): $b verändern
Hallo, Daniel,
Du ("news A") meintest am 05.10.07:
>> Für sowas kann man die Funktion array_walk() ganz gut nutzen.
>> Solltest du dir mal im PHP Manuel angucken.
> Wer ist dieser Manuel und wo kann man ihn finden?
Das ist der Nachbar von "auto".
Viele Gruesse!
Helmut
Re: foreach($a as $b): $b verändern
Daniel Fett schrieb:
> Eben. Und vom Manuel liest man leider ziemlich oft, besonders
> hierzugroups...
Hab das gar nicht bemerkt, dass es falsch geschrieben wurde und selbst
einfach genau so geschrieben. ^^ Dumm nur dass solche Fehler meine
Rechtschreibprüfung nicht merkt...
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/