array Frage...

Eine Frage an die PHP Gurus.

Wie kann ich in ein array an einer bestimmten Stelle einen anderen Wert schreiben?
Muß ich dazu das array in einen einzelnen string wandeln um es verändern zu können?
Und um es global zu speichern den String dann per SetValueString… weiterverarbeiten, damit er auch in anderen Scripten verfügbar wird?

z.B. ändern der Position 3 von Termin in Termin_Neu


$termin=array["2","3","Termin"];

Gruß Thomas

Moin Thomas,

sorry, das greift schon in eingemachte :slight_smile:

Wenn dir sonst keiner helfen kann, frag „HJH“ .

versuch mal z.b. $termin[0] = „neuer wert“;

[0] ist der erste wert, wenn du den zweiten arraywert ändern willst, dann [1] - probier mal ob das klappt.

Hallo Peter,

ich habe mich vieleicht ein wenig falsch ausgedrückt, ich möchtes das array global ändern, innerhalb des scriptes ist mir das klar.

D.h.


$termin=array["2","3","Termin"]; 
$termin[2]= "Termin_Neu";

würde zwar innerhalb des scriptes gehen, aber das Ursprungsarray soll sich ja dauerhaft ändern.
Ich möchte meine jetzige Terminverwaltung im Designer ein wenig optimieren um mir Geburtstage und wiederkehrende Termine ausgeben zu lassen.
Per TimerWizard ist mir das ein wenig zu umständlich. Und so lernt man ein wenig PHP dazu.

Hallo Thomas,

der Zugriff auf Dein Array geht so:

Zuweisung an das 2. Element:

$termin[1] = "17"; // Zählung des Index beginnt bei 0

Auslesen des 3. Elements:

$element3 = $array[2]; // Zählung des Index beginnt bei 0

Das Array als IPS-String-Variable abspeichern:

$IPSarray = implode(";", $termin);  // Elemente werden durch ";" voneinander getrennt
SetValueString("IPSarray", $IPSarray);

Die IPS-Variable wieder in ein Array einlesen:

$IPSarray = GetValueString("IPSarray");
$termin = explode(";", $IPSarray);

Es ist dringend anzuraten im PHP-Manual die Funktionen implode und explode nachzulesen.
Außerdem gibt es noch viele andere teilweise sehr nützliche und „highly sphisticated“ Funktionen.
So ist es z.B. möglich den Elementen Namen zu geben. Solche Elemente sind dann unter dem Namen zu erreichen.

Gruß
HJH

Sehr schön, das war mal wieder Top!
Genau das hab ich gesucht, mir war auch so das ich vor kurzem die Umwandlung in einen String in der PHP Doku gesehen habe, na da kann ich ja jetzt ein wenig experimentieren. THX

Und gute Nacht…

Kurze Anmerkung noch:

Die array Elemente müssen doch durch „,“ und nicht durch „;“ getrennt werden?

Doku:


implode
(PHP 4, PHP 5)

implode — Verbindet Array-Elemente zu einem String

Beschreibung
string implode ( string $glue, array $pieces )

Gibt einen String mit einer String-Repräsentation aller Array-Elemente in der gleichen Reihenfolge wie in dem Array zurück, bei dem die einzelnen Array-Elemente mit dem im Parameter glue angegebenen String verbunden werden. 

Beispiel 2139. implode() Beispiel

<?php

$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);

echo $comma_separated; // lastname,email,phone

?> 


Hallo Thomas,

der „glue character“ kann frei gewählt werden. Er hat nichts mit dem Komma im Array zu tun. Wenn Du dir den Rückgabe-String von implode ansiehst, wirst Du feststellen, dass die Elemente durch den „glue character“ getrennt werden. der Vorgang kann durch explode wieder rückgängig gemacht werden.

Es ist natürlich sinnvoll ein Zeichen zu verwenden, das sonst nicht im Array verwendet wird. Ich nehme eben gerne das Semikolon.

Gruß
HJH

Ok, HJH, das verstehe ich.

Aber bei mir kommt bei


$termin=array("2";"3";"Termin");

folgender Fehler:


<b>Parse error</b>:  parse error, unexpected ';', expecting ')' in <b>C:\Programme\IP-Symcon\scripts\.currentscript</b> on line <b>11</b><br />

Sorry HJH, hab nochmal das Manual gewälzt, nicht im array soll ich durch Semikolon trennen, sondern nur beim implode Befehl. :o
So geht es jetzt danke. :slight_smile:

Und jetzt entgültig gute Nacht.

Hallo Thomas,

selbstverständlich darfst Du die PHP-Syntax nicht verletzen. In der PHP-Syntax ist das Komma als Listentrenner vorgeschrieben.

Du definierst Dein Array also streng nach den Regeln:

$termin = array("2", "3", "Termin");

Die implode-Funktion macht aus dem Array einen String:

$IPSarray = implode(";", $termin);
print_r $IPSarray; // ergibt: "2;3;Termin"

In dieser Form kann das Array nun als IPS-String-Variable abgespeichert werden.

Die explode-Funktion trennt nun den String $IPSarray an den Trennstellen (";") wieder in einzelne Elemente und schreibt diese in ein neues Array.
Die explode-Funktion macht also aus dem String ein Array:

$termin = explode(";", $IPSarray);

Damit ist der alte Zustand wieder hergestellt.

Aber, wie ich gerade sehe, hast Du das inzwischen selbst herausgefunden. :slight_smile:

Gruß
HJH


ich nehme gerne für im- und explode „___“ oder „###“, die wahrscheinlichkeit, das das irgendwo verwendet wird, ist sehr gering :).

Hallo,

hier noch ein Weg, den ich gern nehme:


$termin = array("2", "3", "Termin");  
$serialized = serialize($termin);

// und zurueck

$termin = unserialize($serialized);


Gruss Torro

Also wie so oft, viele Wege führen nach Rom…:smiley:

Hallo Torro, hallo Thomas,

Torro hat Recht:
un/serialize ist sogar noch besser, da man sich hier nicht um die verwendeten Datentypen kümmern muss. Es ist sogar möglich verschiedene Datentypen im selben Array zu verwenden.

Darüber hinaus ist die Handhabung unschlagbar einfach.

Ich werde in Zukunft diese Funktionen verwenden. Danke für den Tipp. :slight_smile:

Gruß
HJH