PHP arrays vergleichen in schleife ?
selfmade01
- php
Hallo,
ich habe hier zwei Arrays eines ist
so aufgbaut
$Hardware_Settings_Array = array("Hardware_Info_Id","Hardware_Type_Id");
und das andere bekomme ich via $_Post
und das sieht so aus
Array
(
[Container_Id] => 17
[Temp_Min] => 20
[Temp_Max] => 22
[Temp_Ideal] => 3
[Room_Id] => 2
[Hardware_Info_Id] => 4
[Hardware_Type_Id] => 6
[Create_Hardwaresettings] => Create Hardwaresettings
)
ich möchte nun eine Schleife bauen um zu vergleichen welche werte gesetzt sind
das versuche ich gerade so, aber es klappt nicht
for($i=0; $i < count($Hardware_Settings_Array); $i++)
{
for($j=0; $j < count($_POST); $j++)
{
echo $_POST[$Hardware_Settings_Array]."<br>";
//echo $Hardware_Settings_Array[$i]."<br>";
// If ($Hardware_Settings_Array[$i] = $_POST[$Hardware_Settings_Array]){
// echo "ist gleich";
}
}
weiss jemand wie es geht?
Grüße Jürgen
Hakuna matata!
Ich hatte kurz vor zu antworten, aber diese Dreistigkeit von Doppelposting und Sockenpuppe hat mach dann davon überzeugt, es sein zu lassen.
Wenn du hier posten willst, dann halte dich bitte an die Regeln.
Hakuna matata!
Ich hatte kurz vor zu antworten, aber diese Dreistigkeit von Doppelposting und Sockenpuppe hat mach dann davon überzeugt, es sein zu lassen.
Wenn du hier posten willst, dann halte dich bitte an die Regeln.
Hallo,
ein Doppelposting war nicht meine Absicht sorry,
beim Absenden des Formulars hier hat mir das System einen Fehler gebracht und das zweimal hintereinander.
Dann habe ich einen anderen Namen verwendet und plötzlich ging es
das daraus ein Doppelposting wurde war nicht meine Absicht
sorry
Hallo,
weiss jemand wie es geht?
du scheinst als Key für das eine Array ein komplettes anderes Array benutzen zu wollen. Das solltest du nochmal überdenken.
Gruß
Kalk
Grüße Jürgen
Hallo,
Dein If kleinschreiben => if und den Vergleichsoperator == anwenden. Tipp: Anstelle zwei Schleifen ineinander zu schachteln, reicht es, nur ein Array durchzugehen und zu schauen, ob der Index im anderen Array einen Wert liefert.
MfG
Hallo,
Dein If kleinschreiben => if und den Vergleichsoperator == anwenden. Tipp: Anstelle zwei Schleifen ineinander zu schachteln, reicht es, nur ein Array durchzugehen und zu schauen, ob der Index im anderen Array einen Wert liefert.
MfG
Hallo,
sorry aber ich hänge da immer noch.
Ich verstehe das mit der Schleife nur wie ich die Werte mit dem Index vergleiche nicht.
Das eine array1 sieht ja z.B. so aus
[0] ===> Hardware_Info_Id ;
[1] ===> Hardware_Type_Id;
[2] ===> Temp_Min;
usw.
insgsamt ca 30 Einträge die eigentlich die Namen der tabellenfelder in der DB sind.
Beim array2 was ich durch das Formular bekomme ist der Index = einer der Namen die im array1 als werte vorkommen.
Ich kann also nicht Werte mit Werte vergleichen (dafür fand ich unzählig viele beispiele im Netz)
ich muss hier jedoch Werte aus array1 mit den Indexname aus array2 vergeleichen und wenn dieses dann gesetzt ist, den Wert´aus dem array2 dann auslesen. Letzeres ist kein Problem
Nur eben der Vergleich zw. Werte und Indexnamen
Grüße Jürgen
Hallo,
insgsamt ca 30 Einträge die eigentlich die Namen der tabellenfelder in der DB sind.
Dann mach doch die Abfrage so, dass Du die Feldnamen als Index auf ein Array bekommst und die Werte dazu.
Ergebnis der Abfrage, z.B. $result['Hardware_Info_Id'] => '12345'
Und der Parameter: $_POST['Hardware_Info_Id'] heißt genauso. Da kannst Du vorzüglich vergleichen, nur einmal über $result rennen.
Machs gut ;)
Hakuna matata!
Ich verstehe das mit der Schleife nur wie ich die Werte mit dem Index vergleiche nicht.
Schleifen sind schlicht unverständlich. Besser ist, man benutzt Funktionen mit sprechenden Namen für das, was man zu erreichen versucht.
Das eine array1 sieht ja z.B. so aus
[0] ===> Hardware_Info_Id ;
[1] ===> Hardware_Type_Id;
[2] ===> Temp_Min;
usw.
insgsamt ca 30 Einträge die eigentlich die Namen der tabellenfelder in der DB sind.Beim array2 was ich durch das Formular bekomme ist der Index = einer der Namen die im array1 als werte vorkommen.
Das zweite Array könnte also zum Beispiel so aussehen:
$array2 = array(
"Hardware_Info_id" => 42,
"Temp_Min" => 50,
"Buuhuuuhuuu" => "fooooo"
);
Und am Ende deiner Berechnung hättest du gerne eine Teilmenge von $array2
, und zwar genau mit den Einträgen, deren Schlüssel in $array1
als Werte hinterlegt ist. Mein Vorschlag:
Du tauschst Schlüssel und Werte des ersten Arrays, um eine Struktur zu erzeugen, die dem zweiten Array sehr ähnlicher ist:
$flipped = array_flip( $array1 );
Anschließend bildest du die Schnittmenge über den Schlüsseln der beiden Arrays:
$intersection = array_intersect_key( $array1, $flipped );
Das ließe sich sogar zu einem Einzeiler zusammenbauen:
$intersection = array_intersect_key( $array1, array_flip( $array2 ) );
Und der Code ist obendrauf sehr viel aussagekräftiger und leserlicher als der Spaghetti-Code, der entsteht, wenn man mit Schleifen arbeitet.
Hakuna matata!
Anschließend bildest du die Schnittmenge über den Schlüsseln der beiden Arrays:
Sorry hab hier einen Fehler gemacht, der erste Parameter der array_intersect_key()
-Funktion sollte stets $array2
sein.
So ist es richtig:
$intersection = array_intersect_key( $array2, $flipped );
bzw.
$intersection = array_intersect_key( $array2, array_flip( $array1 ) );