2017-01-19 1 views
1

Hallo Ich habe dieses Array von ObjektSuche Werte in Array von Object PHP

[ 
    { 
    "id": 1, 
    "categories": [ 
     222, 
     243, 
     208, 
     115, 
     173, 
     253, 
     236, 
     121, 
     69, 
     250, 
     221, 
     270, 
     245, 
     123, 
     124 
    ] 
}, 
{ 
    "id": 2, 
    "categories": [ 
     222, 
     243, 
     208, 
     69, 
     250, 
     221, 
     270, 
     245, 
     123, 
     124 
    ] 
},{ 
    "id": 8774, 
    "categories": [ 
     222, 
     243, 
     208, 
     115, 
     173, 
     253, 
     236, 
     121 
    ] 
} 
] 

ich in den „Kategorien“ Array aller Objekte Werte in anderen Array gesucht werden soll und das Spiel zu drucken.

Beispiel möchte ich die Werte 222 und 121, Werte suchen, die ich in Array schieben

$array = ("222","121"); 

Und ich möchte diese zwei Werte im Ergebnis suchen und drucken nur das Objekt-ID = 1 und 8774, weil sind diejenigen, die zusammenfallen.

Ich habe mit array_filter in eine foreach getestet, aber doenst funktioniert! Irgendeine Idee? Dank

Das ist mein Code

$search = array("231","228"); 
    $result = array_filter($array, function ($item) use ($search) { 
     if (array_intersect($item["categories"], $search)) { 
      return true; 
     } 
     return false; 
    }); 
//$array is the array of object result 

array_intersect funktioniert, aber ich brauche nur die Objekte drucken, die die Werte in eine „Suche“ Array enthält. Wenn man bedenkt, dass das Array "search" mehr als zwei Werte haben kann

+0

http://php.net/manual/en/function.array-intersect.php – nogad

+0

'array_filter' sollte funktionieren. Zeigen Sie Ihren Code, damit wir Ihnen sagen können, was Sie falsch gemacht haben. – Barmar

+0

Bearbeitet @Barmar. Array-Filter funktioniert aber array_intersect, dass ich nicht für mich arbeite, aber ich möchte die Objekte, die die Werte im Such-Array enthält – ZizouJd

Antwort

1

array_intersect($array1, $array2) wird truthy sein, wenn es Übereinstimmungen zwischen den beiden Arrays gibt. Es sieht so aus, als ob Sie nur die Elemente mit Kategorien in $search auswählen möchten. Um das zu testen, müssen Sie

if (count(array_intersect($item["categories"], $search)) == count($search)) 

DEMO

auch verwenden, in der Regel keinen Sinn, es in schriftlicher Form

if (condition) { 
    return true; 
} else { 
    return false; 
} 

Schreiben Sie einfach:

return condition; 

So wie es aussieht :

$result = array_filter($array, function ($item) use ($search) { 
    return count(array_intersect($item["categories"], $search)) == count($search); 
}); 
+0

Das ist für mich funktioniert! Vielen Dank! – ZizouJd