Frage von exoarx, 52

Multidimensionale Arrays vergleichen PHP?

Hallo, ich habe 2 Multidimensionale jene ich gerne mittels id vergleichen möchte. Beispiel

array(3) {
  [0]=
  array(6) {
    ["x"]="40"
    ["y"]="30"
    ["width"="22"
    ["height"]="22"
    ["id"]="64851"
    ["plugin"]= "990"
  }
  [1]=
  array(6) {
    ["x"]="43"
    ["y"]= "62"
    ["width"]= "82"
    ["height"]= "26"
    ["id"]="64856"
    ["plugin"]="07"
  }
  [2]=
  array(6) {
    ["x"]="T2"
    ["y"]="46"
    ["width"]="r2"
    ["height"]="32"
    ["id"]= "64841"
    ["plugin"]="0t"
  }
}

array(4) {
  array(7) {
    ["id"]="64841"
    ["location"]= "0"
    ["plugin"]= "0"
    ["x"]= "2"
    ["y"]= "4"
    ["width"]= "2"
    ["height"]= "2"
  }
  [1]=
  array(7) {
    ["id"]= "64851"
    ["location"]= "0"
    ["plugin"]= "0"
    ["x"]= "4"
    ["y"]= "0"
    ["width"]= "2"
    ["height"]= "2"
  }
  [2]=
  array(7) {
    ["id"]= "64853"
    ["location"]= "0"
    ["plugin"]= "0"
    ["x"]= "0"
    ["y"]= "0"
    ["width"]= "2"
    ["height"]= "2"
  }
  [3]=>
  array(7) {
    ["id"]= "64856"
    ["location"]= "0"
    ["plugin"]= "0"
    ["x"]= "3"
    ["y"]= "2"
    ["width"]= "2"
    ["height"]= "2"
  }
}

ERGEBNISS:

             array(7) {
            ["id"]= "64853"
            ["location"]= "0"
            ["plugin"]= "0"
            ["x"]= "0"
            ["y"]= "0"
            ["width"]= "2"
            ["height"]= "2"
          }

Hat jemand von euch einen Lösungsvorschlag? Danke schonmal.

MFG Armin

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von triopasi, 45

Was genau ist die Ausgabe?? Was gleich is in den Arrays oder was unterschiedlich ist? Kann das Ergebnis nur ein Treffer sein, da nur eine ID?

Kommentar von exoarx ,

Es soll lediglich die ids überprüfen und mir den Array mit der fehlenden Id ausgeben.

Kommentar von triopasi ,

Da gibts was das nennt sich forschleife.

Kommentar von exoarx ,

Kannst du mir ein Codebeispiel geben wie du das problem lösen würdest?

Kommentar von triopasi ,

foreach(e1 in 1. array) { foreach(e2 in 2. array) { found = false; if(e1.id == e2.id) found = true; } if(!found) fehlend[] = e1; } hoffe das reich dir bin leider grad am handy. ansonsten schich mir ne freundschaftsanfrage dann schreib ich dir was genaueres

Kommentar von triopasi ,

das found = false muss direkt unter das erste foreach! hab aufm handy schon die übersicht verloren xD

Kommentar von exoarx ,

Naja also ganz auf dem Holzweg war ich nicht: 

while ($value = $stmt->fetch(PDO::FETCH_ASSOC)) {

$found = false;
foreach ($json_arr as $element) {
if ($value['id'] != $element['id']) {
$found = true;
}
}
if (!$found) {
$del = $value['id'];
}
}

Danke werd ich kurz Testen

Antwort
von regex9, 40

Ich verstehe noch nicht ganz, was du in deinen Code-Abschnitten da nun gemacht hast.

Wenn du die Id mit anderen Ids vergleichen möchtest, dann laufe mit einer Schleife durch das Array. Wenn das Array immer sortiert ist, schreibe dir einen Algorithmus für eine binäre Suche.

Antwort
von adulescentulus, 8

Also wenn ich verstehe suchst du die Elemente die nicht in beiden enthalten sind ? Von der Mengenlehre aus nennt man das die Symmetrische Differenz. Ich würde 2 verschachtelte foreach schleifen nehmen und auf Gleichheit prüfen. Sollten 2 Werte gleich sein so nutzt du unset() um sie aus den Array zu entfernen. Am Ende hast du dann nur noch alles Werte die einmalig sind. Hoffe ich konnte helfen.

Kommentar von adulescentulus ,

foreach($arrayA as $k=>$v){
foreach($arrayB as $kk=>$vv){
if($v['id'] == $vv['id']){
unset($arrayA[$k]);
unset($arrayB[$kk]);
}
}
}

Über MySQl wäre es aber einfacher mittels Join zu lösen
Antwort
von Levatc, 43
Antwort
von RedKungFuMastr, 31

Du hast deine Frage schon selbst beantwortet.
"Vergleichen"

Mal ernsthaft, wegen einer foreach-Schleife stellt man hier doch keine Frage auf --"

Keine passende Antwort gefunden?

Fragen Sie die Community