Array ergänzen
MarryFitch
- php
0 derletztekick0 MarryFitch1 wahsaga
1 Daywalker0 MarryFitch0 dedlfix
1 wahsaga1 dedlfix
Wie kann man in einem Array später weiter Felder anlegen?
Mein Idee war folgende:
$artikel = array ("A12","A23","A44","A55");
$artikel = $artikel + array ("A33","A45","A11","A77");
Klappt aber nicht. Wie ist die richtige Syntax?
Hallo MarryFitch,
Wie kann man in einem Array später weiter Felder anlegen?
Mit array_push ist das bspw. möglich. Ansonsten würde ich einfach den nächst höheren Index nehmen und es ergänzen:
$artikel = array ("A12","A23","A44","A55");
$artikel[count($artikel)] = "A66";
Mit freundlichem Gruß
Micha
$artikel = array ("A12","A23","A44","A55");
$artikel[count($artikel)] = "A66";
Danke für die schnelle Hilfe.
Jetzt habe ich noch eine Frage.
Wie kann ich einzelnde Felder löschen?
Also wenn z.B. das Feld löschen will wo "A23" drin steht.
hi,
Jetzt habe ich noch eine Frage.
Wie kann ich einzelnde Felder löschen?
Also wenn z.B. das Feld löschen will wo "A23" drin steht.
Dann identifizierst du erst mal dieses "Feld", also das Array-Element - um darauf zugreifen zu können.
Und dann könntest du bspw. array_slice() benutzen, oder auch einfach unset(), um das Array-Element zu entfernen.
Und bei noch weiteren Fragen schaust du dich jetzt bitte erst mal selber bei den Array-Funktionen aufmerksam um.
gruß,
wahsaga
Mit array_push ist das bspw. möglich. Ansonsten würde ich einfach den nächst höheren Index nehmen und es ergänzen:
$artikel = array ("A12","A23","A44","A55");
$artikel[count($artikel)] = "A66";
Das ist unperformant, unübersichtlich und unkorrekt für die Allgemeinheit aller möglichen Arraykonstellationen.
count() liefert die ANZAHL der im Array enthaltenen Elemente. Dies ist nur dann identisch mit dem nächsthöheren nutzbaren Arrayindex, wenn die Arrayelemente nullbasiert und lückenlos fortlaufend numeriert sind.
Mit der Zuweisung $artikel[] = 'neuerwert' hingegen wird automatisch der nächsthöhere numerische Arrayindex genommen und ein Element angefügt. Es nutzt weniger Funktionsaufrufe, ist deutlich kürzer zu tippen und dementsprechend übersichtlicher.
Hallo Daywalker,
Das ist unperformant, unübersichtlich und unkorrekt für die Allgemeinheit aller möglichen Arraykonstellationen.
Zum ersten kann ich nichts sagen; das zweite leigt im Auge des Betrachters; wenn es funktioniert kann es nicht unkorrekt sein, für die Allgemeinheit muß es nicht sein, es reicht, wenn es auf ein bestimmtest Problem anwendbar ist.
wenn die Arrayelemente nullbasiert und lückenlos fortlaufend numeriert sind.
Was sie hier ($artikel = array ("A12","A23","A44","A55");
wohl sind, oder?
ist deutlich kürzer zu tippen und dementsprechend übersichtlicher.
Prauschal stimmt diese Aussage nicht! Nicht alles, was kürzer ist, muss auch übersichtlicher sein. Ich denke hier zB an Ausdrücke in if-Bedingungen, die man auf Grund der Übersichtlichkeit in Klammern setzt...
Trotzdem Danke für den Hinweis.
Mit freundlichem Gruß
Micha
Ich habe es nicht geschaft das Problem zu lösen.
Das Array das ergänzt werden soll ist selber auch in einem SessionArray gespeichert.
Die Datei1 soll in das $artikel array die beiden Werte einfügen ("1","A12"). Das $artikel array wird dann im $_Session array gespeichert.
In der Datei2 soll er dann das Array ausgeben.
Soweit klappt die Geschicht auch.
Ich würde nun gern so haben, dass wenn ich von Datei2 via Link wieder zu Datei1 gehe, die Werte ("1","A12") nochmals im Array gespeichert werden. So dass wenn ich beim zweiten Aufruf der Datei2 dann als Augabe folgendes habe:
1
A12
1
A12
Beim dritten Aufruf:
1
A12
1
A12
1
A12
--------------------------Datei1-----------------------------------
<?php
session_start();
echo '
<html>
<head></head>
<body>';
echo "Willkomen in meiner großen WELT!!! huipfui";
$artikel = array ("1","A12");
$_SESSION['artikel'] = $artikel;
echo '<br><br><br><br><a href=test7.php?'.session_name().'='.session_id().'>-- NEXT7 --</a> </body>
</html>';
?>
--------------------------Datei2-----------------------------------
<?php
session_start();
echo '
<html>
<head></head>
<body>';
echo 'Willkommen auf Seite 2';
echo '<br><br><br>NAME: '.$_SESSION['name'].'<br><br><br>';
foreach ($_SESSION["artikel"] as $element)
{
echo $element.'<br>';
}
echo '<br><br><br><br><a href=test6.php?'.session_name().'='.session_id().'>-- NEXT6 --</a> </body>
</html>';
?>
echo $begrüßung;
Das Array das ergänzt werden soll ist selber auch in einem SessionArray gespeichert.
$artikel = array ("1","A12");
$_SESSION['artikel'] = $artikel;
Dies sind auch keine Ergänzungen sondern nur (überschreibende) Zuweisungen. Verwende array_merge().
fecho "$verabschiedung $name";
hi,
Wie kann man in einem Array später weiter Felder anlegen?
Mein Idee war folgende:$artikel = array ("A12","A23","A44","A55");
$artikel = $artikel + array ("A33","A45","A11","A77");
Klappt aber nicht. Wie ist die richtige Syntax?
Mit $array[] = $wert kannst du einzelne neue Elemente anfügen.
Komplette Arrays "addieren" kannst du aber auch, mit array_merge().
gruß,
wahsaga
Mit $array[] = $wert kannst du einzelne neue Elemente anfügen.
Richtig aber ich würde lieber array_push() verwenden, weil das die bessere Methode wäre einem Array einen Wert anzuhängen und dem sauberen Programmieren eher dienlich ist.
echo $begrüßung;
Mit $array[] = $wert kannst du einzelne neue Elemente anfügen.
Richtig aber ich würde lieber array_push() verwenden, weil das die bessere Methode wäre einem Array einen Wert anzuhängen und dem sauberen Programmieren eher dienlich ist.
Auch das Handbuch rät bei nur einem anzuhängenden Element von array_push() ab, weil es mit dem Overhead eines Funktionsaufrufs daherkommt.
Inwiefern siehst du die Verwendung von array_push() sauberer als die Zuweisungsmethode?
echo "$verabschiedung $name";
Inwiefern siehst du die Verwendung von array_push() sauberer als die Zuweisungsmethode?
$x = true;
if($x = false){
$array = array(10,20);
}
$array[] = 30;
$ergebnis = $array[0] + $array[1] + $array[2];
print $ergebnis;
Du weisst einfach nicht, ob das Array schon existiert oder nicht. $array[] = 30; erstellt das Array, falls es noch nicht existiert. Das kann gewollt sein (dann wäre diese Schreibweise ein Vorteil) oder aber auch nicht. Und wenn man erwartet, dass das Array schon existiert würde ich ganz gerne informiert werden, wenn es nicht so ist.
echo $begrüßung;
Und wenn man erwartet, dass das Array schon existiert würde ich ganz gerne informiert werden, wenn es nicht so ist.
Wenn ich ein existierendes Array erwarte, dann sorge ich dafür, dass es unbedingt (sprich: außerhalb von if) angelegt wird, beispielsweise als leeres Array.
$array = array();
$x = true;
if($x = false){
Diese Zuweisung ist sicherlich nur ein Flüchtigkeitsfehler. Im Allgemeinen ist aber das Vergleichen mit true oder false überflüssig. Ein negierendes ! tut es auch. Um $x mit false zu vergleichen muss dessen Inhalt von PHP erst in einen booleschen Wert umgewandelt werden und der kann dann gleich vom if ohne einen zusätzlichen Ausdruck, der erst noch berechnet werden muss, ausgewertet werden.
$array = array(10,20);
}
$array[] = 30;
$ergebnis = $array[0] + $array[1] + $array[2];
Kann man übrigens abkürzen mit array_sum().
print $ergebnis;
echo "$verabschiedung $name";
Es war nur ein Beispiel auf die schnelle, deswegen der Flüchtigkeitsfehler :)
Das Summieren der Array war absichtlich so gewählt, damit man die Indizies sieht, die ja eigentlich garnicht existieren. Ebensogut könnte ich 2 Arrays haben. Mit einer Bedingung prüfe ich, welches Array angelegt werden soll. Die Bedingung ist aber nie Wahr --> Das Array wird nicht angelegt. Ein error_reporting(EALL) gibt mir dann unschöne sachen aus, wenn ich anschliessen mit nicht existierenden Indizies arbeite. Es gibt unendlich viele Möglichkeiten, wie so ein Fall zustande kommen kann. Bei dem Beispiel von mir könntest du das Array auserhalb der Bedingung erstellen, ebensogut danach prüfen, ob es existiert etc. Mit array_push() wäre ich jedenfalls immer auf der richtigen Seite.
echo $begrüßung;
Ein error_reporting(EALL) gibt mir dann unschöne sachen aus,
Unschön finde ich das ganz und gar nicht. Das sind wertvolle Hinweise, dass man was vergessen hat.
Es gibt unendlich viele Möglichkeiten, wie so ein Fall zustande kommen kann.
Und alle lassen sich umgehen, wenn man seine Variablen konsequent initialisiert.
Bei dem Beispiel von mir könntest du das Array auserhalb der Bedingung erstellen, ebensogut danach prüfen, ob es existiert etc. Mit array_push() wäre ich jedenfalls immer auf der richtigen Seite.
Das sehe ich nicht so. Man bekommt nur eine Warnung, wenn das erste Argument von array_push() kein Array ist. Das erste Argument wird aber nicht automatisch in ein Array umgewandelt. Wenn es vorher keins war ist es hinterher auch keins. Man muss nun sowieso dafür sorgen, dass das Script korrigiert wird, so dass dieser Fehler verschwindet. Und dann kommt die Meldung nie wieder. Ein kleiner Vorteil bei der Entwicklung gegenüber einem Funktionsaufruf bei jedem Scriptlauf - finde ich nicht sehr effektiv.
In beiden Fällen arbeitet das Script teilweise nicht richtig. Die Chancen, den Fehler zu finden schätze ich als gleich groß ein. Wer sich nicht die Mühe macht, sein Script möglichst umfassend zu prüfen, wird den Fehlerfall nicht zu Gesicht bekommen und damit auch die Warnung nicht.
echo "$verabschiedung $name";
echo $begrüßung;
$artikel = array ("A12","A23","A44","A55");
$artikel = $artikel + array ("A33","A45","A11","A77");Klappt aber nicht. Wie ist die richtige Syntax?
Der Grund steht in der Beschreibung der Array-Operatoren. + verändert die Keys nicht, und im linken Array vorhandene Keys werden nicht überschrieben. array_merge() dagegen vergibt neue Keys, wenn die alten numerisch gewesen sind.
echo "$verabschiedung $name";