簡體   English   中英

PHP-根據每個對象內的數組值過濾對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM