PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP -> Array mit Variablen...


daflow
2007-11-14, 21:50:27
Hi,

ich habe 2 arrays mit Variablen erstellt folgendes Konstrukt soll überprüfen ob die jeweilgen Variablen gleiche Werte enthalten und wenn dies der Fall ist die Variablen aus array1 gleich "null" setzen. Klappt auch wunderbar...
solange man über den Arrayindex zugreift, die Variable ausserhalb des Arrays angesprochen bleibt aber davon unberührt... working as designed?
*
Edit: Grmpf... gut macht Sinn er setzt ja der Wert für den Index 'i' auf 0... sprich die Variable an sich fliegt eigtnlich aus dem Array statt deren Wert auf 0 zu setzen... Vorschläge zur Realisierung nehm ich trotdzem nach wie vor gerne an...
*
Alternativen um der Variable ein Nullvalue zuzuweisen bei gleichem Wert
(wird später in eine Datenbanktabellenspalte geschrieben) nehm ich auch gerne an...


for ($i=0;$i<count($array1); $i++)
{
($array1[$i]==$array2[$i])

{
$array1[$i]=NULL;
}

}

Marscel
2007-11-14, 22:31:35
Verstehe ich dein Problem richtig? Du willst im Grunde genommen den Wert eines Arrays am Index i NULL haben, damit du in die Datenbank in einer Spalte später keinen Wert hast (d.h. Null)?

Das wird mittels PHP nicht funktionieren, glaube ich, da ein PHP-Typ (http://de2.php.net/manual/de/language.types.null.php) Null in einem Query String nicht auch NULL heißt.

Vielmehr musst du einfach einen String "NULL" einsetzen. Ich weiß nicht, wie dein Query geformt wird, aber wenn im Array sonst Strings stehen, sollten diese noch ein einfaches Anführungszeichen haben, sprich "'abc'" (oder '\'abc\''), desweiteren aber "NULL".
Beim Array


$arr = array (
"'abc'",
"NULL",
"'def'",
)

setz du das meinetwegen so in den Query ein
$sql = "INSERT INTO x (col1, col2, col3) VALUES(".$arr[0].", ".$arr[1].", ".$arr[2].");";

sodass letztendlich das drin steht
$sql == "INSERT INTO x (col1, col2, col3) VALUES('abc', NULL, 'def');";

Wenn die Spalte NULL zulässt, sollte das so funktionieren (habs mit MySQL probiert).

daflow
2007-11-15, 08:51:55
Nicht ganz... ob da jetz 0/Null/Leerzeichen o.ä. drinsteht ist mein geringstes Problem, das bring ich der Datenbank schon bei... ;)

zur Verdeutlichung:
beide Arrays sind mit Variablen gefüllt die Werte enthalten z.B.
array1=array($paraa1,$parab1,$parac1,$para1....);
array2=array($paraa2,$parab2,$parac2,$para2....);

Und ich würde gerne die _Inhalte_ der Variablen in diesem Array miteinander Vergleichen... bzw. bei Gleichheit die Variablen aus dem einen Array dann eben
0 setzen, unsetten was auch immer... ;)

daflow
2007-11-15, 08:55:26
setz du das meinetwegen so in den Query ein
$sql = "INSERT INTO x (col1, col2, col3) VALUES(".$arr[0].", ".$arr[1].", ".$arr[2].");";


Würde so funktionieren ist aber verdammt unübsersichtlich, weil ca 30 Spalten in diesem insert angesprochen werden und sowas wie $arr[23] doch relativ nichtssagend darüber ist, was da grad reingeschrieben wird

Kinman
2007-11-15, 09:27:23
Irgendwie ist die Beschreibung etwas kompliziert ;)


$a = 5;
$b = 8;
$c = 9;
$d = 8; //Gleich wie $c

$array_1[0] = $a;
$array_1[1] = $b;

$array_2[0] = $c;
$array_2[1] = $d;

/*
$array_1[1]und $array_2[1] sind haben jetzt den gleichen Wert. Und somit sollte $b (und $d?) auf 0 bzw. null gesetzt werden?
*/

Hab ich das jetzt richtig verstanden?

Wenn ja, dann können Dir Referenzen weiterhelfen

$a = 5;
$array[0] = &$a;
$array[0] = 10;
echo($a);


Eine Referenz ist einfach eine Alias Bezeichnung für die Variable.
In obigen Beispiel ist $a und $array[0] das gleich nur mit anderer Bezeichnung. Referenzen sind keine Pointer (so wie in C)

mfg Kinman

Gast
2007-11-15, 09:59:18
Irgendwie ist die Beschreibung etwas kompliziert ;)


$a = 5;
$b = 8;
$c = 9;
$d = 8; //Gleich wie $c

$array_1[0] = $a;
$array_1[1] = $b;

$array_2[0] = $c;
$array_2[1] = $d;

/*
$array_1[1]und $array_2[1] sind haben jetzt den gleichen Wert. Und somit sollte $b (und $d?) auf 0 bzw. null gesetzt werden?
*/

Hab ich das jetzt richtig verstanden?

Wenn ja, dann können Dir Referenzen weiterhelfen

$a = 5;
$array[0] = &$a;
$array[0] = 10;
echo($a);


Eine Referenz ist einfach eine Alias Bezeichnung für die Variable.
In obigen Beispiel ist $a und $array[0] das gleich nur mit anderer Bezeichnung. Referenzen sind keine Pointer (so wie in C)

mfg Kinman

Jap, verstanden ;)
Vielen lieben Dank, Referenzierung war genau das was ich gesucht hab, jetz klappts :)

daflow
2007-11-15, 13:50:19
Btw. dat "NULL"en hab ich über ein Konstrukt gelöst das per is_numeric($var)
überprüpft obs 'ne Zahlenzeichenkette ist und je nachdem dann eben ein int oder ein char"null" zurückgibt :O