![](/img/trans.png)
[英]How to sort PHP array of objects by a value inside an object in each element?
[英]PHP - Filter objects based on array values inside each object
我有一個對象數組,其中每個對象都包含一個屬性數組
$cars = [
"toyota" => ["colors" => ["red","blue"]],
"mazda" => ["colors" => ["red"]],
"honda" => ["colors" => ["blue"]],
"nissan" => ["colors" => ["red","yellow"]],
];
我需要一個函數,該函數將返回具有指定顏色的所有汽車。
我可以使用foreach循環來做到這一點。
function getCarsByColor(string $color, array $cars){
foreach($cars as $key => $car){
if(!in_array($color, $car['colors'])){
unset($cars[$key]);
}
}
return $cars;
}
只是想知道是否有更直接的方法可以做到這一點。
謝謝。
這種方法使用array_filter()
$red_cars = array_filter($cars, function($car) {
return in_array('red', $car['colors']);
});
作為功能
function get_cars_by_color(array $cars, string $color = '') {
return array_filter($cars, function($car) use ($color) {
return in_array($color, $car['colors']);
});
}
use()
將變量從當前作用域傳遞到閉包函數作用域。
從概念上講,您所做的沒有什么錯。 在這種特定情況下,實際上只有兩個選擇:1)修改陣列副本以刪除不需要的條目(您現在要執行的操作),或2)創建僅包含所需條目的新陣列。 隨您選擇吧,真的。 我注意到的一件事:
if(!in_array($color, $car['color'])){
這可能是一個錯字,但是根據您的數組定義,將沒有名為“ color”的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.