按属性搜索数组中对象的有效方法

2022-08-30 14:07:53

好吧,有这样的东西:

$array[0]->id = 'one';
$array[0]->color = 'white';
$array[1]->id = 'two';
$array[1]->color = 'red';
$array[2]->id = 'three';
$array[2]->color = 'blue';

实现像这样的方法的最快,最有效的方法是什么

function findObjectById($id){}

如果 i 调用,则返回对象 $array[0]:

$obj = findObjectById('one')

并且如果我传递“四”作为参数,则会返回 false。


答案 1

您可以迭代该对象:

function findObjectById($id){
    $array = array( /* your array of objects */ );

    foreach ( $array as $element ) {
        if ( $id == $element->id ) {
            return $element;
        }
    }

    return false;
}

编辑:

更快的方法是使用一个数组,其中的键等于对象的ID(如果唯一);

然后,您可以按如下方式构建函数:

function findObjectById($id){
    $array = array( /* your array of objects with ids as keys */ );

    if ( isset( $array[$id] ) ) {
        return $array[$id];
    }

    return false;
}

答案 2

你可以像这样使用php的函数array_search

$key=array_search("one", array_column(json_decode(json_encode($array),TRUE), 'color'));
var_dump($array[$key]);