好吧,有类似的东西:
$array[0]->id = 'one';
$array[0]->color = 'white';
$array[1]->id = 'two';
$array[1]->color = 'red';
$array[2]->id = 'three';
$array[2]->color = 'blue';
Run Code Online (Sandbox Code Playgroud)
什么是最快,最有效的方法来实现像这样的方法
function findObjectById($ id){}
如果我调用它将返回对象$ array [0]:
$obj = findObjectById('one')
Run Code Online (Sandbox Code Playgroud)
如果我把'四'作为一个参数传递,它将返回false.
hak*_*kre 44
对于规范参考:
$obj = array_column($array, null, 'id')['one'] ?? false;
Run Code Online (Sandbox Code Playgroud)
根据false问题要求返回 false。它代表不匹配的值,例如您可以将其null作为替代建议。
从 PHP 7.0 开始,这是透明的。如果您(仍然)拥有旧版本,则可以将其用户空间实现用作直接替代版本。
但array_column也意味着复制整个数组。这可能是不需要的。
相反,它可以用于索引数组,然后映射到array_flip:
$index = array_column($array, 'id');
$map = array_flip($index);
$obj = $array[$map['one'] ?? null] ?? false;
Run Code Online (Sandbox Code Playgroud)
在索引上,搜索问题可能仍然相同,地图仅提供原始数组中的索引,因此存在一个参考系统。
请记住,这可能不是必需的,因为 PHP 具有写时复制。因此,正如有意想象的那样,重复可能会更少。所以这是为了展示一些选项。
另一种选择是遍历整个数组,除非已经找到该对象,否则检查是否匹配。一种方法是使用array_reduce:
$obj = array_reduce($array, static function ($carry, $item) {
return $carry === false && $item->id === 'one' ? $item : $carry;
}, false);
Run Code Online (Sandbox Code Playgroud)
该变体同样具有false不匹配的返回要求。
这是更直接一点null:
$obj = array_reduce($array, static function ($carry, $item) {
return $carry ?? ($item->id === 'one' ? $item : $carry);
}, null);
Run Code Online (Sandbox Code Playgroud)
然后可以添加不同的不匹配要求$obj = ...) ?? false;。
完全暴露在foreach它自己的函数中甚至有在匹配时直接退出的好处:
$result = null;
foreach ($array as $object) {
if ($object->id === 'one') {
$result = $object;
break;
}
}
unset($object);
$obj = $result ?? false;
Run Code Online (Sandbox Code Playgroud)
Amm*_*eel 15
i:是数组中项目的索引
1: 是寻找的财产价值
$arr:查看内部的数组
'ID':属性键
$i = array_search(1, array_column($arr, 'ID'));
$element = ($i !== false ? $arr[$i] : null);
Run Code Online (Sandbox Code Playgroud)
您可以迭代这些对象:
function findObjectById($id){
$array = array( /* your array of objects */ );
foreach ( $array as $element ) {
if ( $id == $element->id ) {
return $element;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
更快的方法是使用一个数组,其中键等于对象的id(如果是唯一的);
然后你可以建立你的功能如下:
function findObjectById($id){
$array = array( /* your array of objects with ids as keys */ );
if ( isset( $array[$id] ) ) {
return $array[$id];
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
小智 8
你可以像这样使用php的array_search函数
$key=array_search("one", array_column(json_decode(json_encode($array),TRUE), 'color'));
var_dump($array[$key]);
Run Code Online (Sandbox Code Playgroud)