2016-12-23 1 views
0

ich eine große Datensammlung von einem API bekommen, das Array, was ich mehr Objekte hat, die enthält: ID, Name, Ort, PLZ.PHP-Weg, um ein großes Array nach Schlüssel zu filtern?

Jetzt muss ich Filter dieses Array erstellen, der Code ist:

$all_objects = $api_result->body->objects; 

Natürlich habe ich es mit einem foreach tun können(), aber was ist der beste Weg, auch für Aufführungen zu filtern wie Objekt von ID 973 bekommen?

+0

und was '$ all_objects'? – Federkun

+0

Bearbeiten Sie Ihre Frage mit den Beispieldaten von $ all_objects oder dem Link der API, die Sie anrufen. Verwenden Sie array_filter, oder Sie können array_key_exists-Funktionen verwenden, um schnellere Ergebnisse zu erzielen. – Bhavin

+0

jemals von 'array_filter' gehört. – Beginner

Antwort

1

können Sie array_filter verwenden.

$all_objects Angenommen ist ein Array von Objekten mit öffentlichen Eigenschaften wie id, name, etc ...

Beispielcode:

$lookup = 973 
$filtered = array_filter($all_objects, function($object) use($lookup) { 
    return ($object->id === $lookup); 
}); 

Und jetzt $filtered nur eine hat (vermutlich) Objekt mit einem öffentlichen Eigenschaft „ID“ 973

Note aufweist: Da beide @timurib @federkun und zeigen an, ist dies nicht der schnellste Weg, um ein Array zu filtern. Eine einfache foreach wäre, wenn alle anderen Dinge gleich sind, faster. Aber Sie würden Millisekunden rasieren und es könnte argumentiert werden, dass die Verwendung von array_* Funktionen den Code klarer macht.

+0

'array_filter' ist definitiv _nicht_ effektiver als' foreach'. Funktionsaufruf in der PHP erfordert einige Overhead und immer langsamer als Inline-Code-Ausführung. Wenn die Frage nach der Leistung dann "Array_filter" ist die falsche Lösung. – Timurib

+0

Das ist nicht falsch, aber die OP fragte nach dem 'besten way', O (1), während' array_filter' eine Zeitkomplexität von O (N) – Federkun

+0

hat Sie sind beide recht. Habe den ** Performance ** -Teil nicht aufgegriffen. In Anbetracht des Codes nahm ich eine grundlegendere Kompetenz an, die möglicherweise falsch war. Mein Fehler. Ich werde die Antwort aktualisieren. – yivi

Verwandte Themen