PDA

Vollständige Version anzeigen : Zu doof für Array


awu
22.08.2007, 15:26
Wer kann mir mal bitte helfen, ein Array um ein Feld zu erweitern. Ich sehe grad den Wald vor lauter Bäumen nicht mehr:


// dem übergebenen Array die Fremdschlüssel ID mitgeben
foreach($fp_aAnlandung as $aAnlandung) {
$aAnlandung['ANLANDEKTR_ID'] = $fp_nID;
Zend_Debug::dump($aAnlandung);
}
Zend_Debug::dump($fp_aAnlandung);
Mein Ausgangs-Array:
array(2) {
[0] => array(2) {
["ANLANDUNG"] => string(6) "Hering"
["MENGE"] => string(2) "25"
}
[1] => array(2) {
["ANLANDUNG"] => string(10) "Plattfisch"
["MENGE"] => string(2) "30"
}
}und was bei rauskommen soll:

array(3) {
["ANLANDUNG"] => string(6) "Hering"
["MENGE"] => string(2) "25"
["ANLANDEKTR_ID"] => string(3) "302"
}
array(3) {
["ANLANDUNG"] => string(10) "Plattfisch"
["MENGE"] => string(2) "30"
["ANLANDEKTR_ID"] => string(3) "302"
}


Danke

Axel

Bleistift
22.08.2007, 15:35
So:
// dem übergebenen Array die Fremdschlüssel ID mitgeben
foreach($fp_aAnlandung as $key => $aAnlandung) {
$fp_aAnlandung[$key]['ANLANDEKTR_ID'] = $fp_nID;
}
oder so (ungetestet):
// dem übergebenen Array die Fremdschlüssel ID mitgeben
foreach($fp_aAnlandung as &$aAnlandung) {
$aAnlandung['ANLANDEKTR_ID'] = $fp_nID;
}

KingCrunch
22.08.2007, 15:43
Zur Eläuterung: Bei foreach wird mit Kopien der Werte des Arrays gearbeitet. Wenn du daran rumfuscht passiert mit dem Ausgangsarray ... joa, nix :D

Die erste Variante vom Bleistift sollte man eigentlich nicht verwenden, ist aber die einfachste und in der Form auch problemlos. Mach ich auch oft genug :D Schwierig wirds vorallen, wenn die Größe des Ausgangsarrays manipuliert wird. Dann kanns unschön werden ^^ Also ich würds so machen oder Variante 3 (siehe unten ;))
Die zweite Variante würde ich persönlich ablehnen, weils & mir doch zu sehr PHP4 is ^^


<?php
for ($i = 0; $i < count ($fp_aAnlandung); $i++) {
$fp_aAnlandung[$i]['ANLANDEKTR_ID'] = $fp_nID;
}
?>

Bleistift
22.08.2007, 15:52
Variante 3 wäre mein nächster Vorschlag gewesen ;)
Variante 1 ist wirklich eher unschön. Du hast also die Wahl zwischen Variante 2 und 3 :P
Allerdings würde ich es so machen:
<?php
$iCount = count($fp_aAnlandung);
for ($i = 0; $i < $iCount; $i++) {
$fp_aAnlandung[$i]['ANLANDEKTR_ID'] = $fp_nID;
}
?>

KingCrunch
22.08.2007, 16:15
Stimmt, die Abfrage findet ja bei jedem Durchlauf statt. Mit irgendwas hab ichs jetz verwechselt, weiß bloss net mehr was Oo

Wobei mir grad noch einfällt: Nimmt man count direkt mit auf, so reagiert die Schleife auch dynamisch auf Größenänderungen des Arrays, heißt: Fügst du ein Element an, wird das auch noch mit bearbeitet, bist du beim vorletzten Index und entfernst das letzte Element, läufst du nicht Gefahr ein Fehler um die Ohrn geklatscht zu bekommen :D

Naja, aber zu aufwendig, wenn die Größe gleich bleibt, stimmt schon.

Bleistift
22.08.2007, 16:20
Mit irgendwas hab ichs jetz verwechselt, weiß bloss net mehr was Oo


Vielleicht mit unserer letzten (ähnlichen) Diskussion. Dort ging es allerdings um foreach.

function getArray() {
echo "getArray ";
return array(1, 2, 3, 4, 5);
}

foreach(getArray() AS $element) {
echo $element . " ";
}
Die Ausgabe ist hier "getArray 1 2 3 4 5". Folglich wird "getArray" nur ein einziges Mal aufgerufen.... Aber wir kommen vom Thema ab :D

awu
22.08.2007, 16:21
Vielen Dank.

Varinate 2 war ja das, was ich probiert habe. Habs jetzt auch mit for gemacht.

Buhh, manchmal...

Bleistift
22.08.2007, 16:22
Vielen Dank.

Varinate 2 war ja das, was ich probiert habe. Habs jetzt auch mit for gemacht.

Buhh, manchmal...

Nein... Es hat einen kleinen Unterschied. Nämlich das "&". Aber keine Ahnung, ob das wirklich funktioniert :D
Mit Variante 3.1 (Also die Variante 3, die ich gepostet habe) bist du allerdings auch gut bedient.

KingCrunch
22.08.2007, 23:57
Vielleicht mit unserer letzten (ähnlichen) Diskussion. Dort ging es allerdings um foreach.

function getArray() {
echo "getArray ";
return array(1, 2, 3, 4, 5);
}

foreach(getArray() AS $element) {
echo $element . " ";
}Die Ausgabe ist hier "getArray 1 2 3 4 5". Folglich wird "getArray" nur ein einziges Mal aufgerufen.... Aber wir kommen vom Thema ab :DStimmt, das wars.
Mit Variante 3.1 (Also die Variante 3, die ich gepostet habe) bist du allerdings auch gut bedient.Pfff, meins ja wohl die erste :mad::D