我有一个JSON对象数组的对象。有点像这样,
$object = [
{
"id":1,
"name":"blue",
"order":4
},
{
"id":2,
"name":"green",
"order":6
},
{
"id":3,
"name":"yellow",
"order":2
}
]
我想以简单的方式访问属性,单行可能是这样的,
说我是否想要名称为“blue”的对象的“顺序”
$ blue_order = $ object [something] - > [name =“blue”] - > order;
有点混合Jquery。但我希望你理解。现在我得到的最好的就是这个,
for($i=0; $i<count($object); $i++){
if($object[$i]->name == "blue"){
$blue_order = $object[$i]->order;
}
}
这看起来非常低效,但我不想使用循环,因为数组非常大并且循环通过它将非常慢。那我该怎么做呢?
我使用了“for”循环而不是foreach,因为数组可以为null。并且数组元素的顺序也不会总是相同。
所以我不能做像
这样的事情$object[0]->order
答案 0 :(得分:0)
您仍然可以使用foreach
,但请检查数组是否先排空,如下所示:
if(!empty($object)){
foreach($object as $element){
if($element->name == "blue"){
$blue_order = $element->order;
}
}
}
此外,您的代码对我来说效率很高,在您找到值后我可能会添加break
,如下所示:
if(!empty($object)){
foreach($object as $element){
if($element->name == "blue"){
$blue_order = $element->order;
break;
}
}
}
如果您的对象包含大量信息并且您要进行大量搜索,那么您可以进行一些预处理,以便更轻松地进行搜索,如下所示:
$object_by_name = array();
if(!empty($object)){
foreach($object as $element){
$object_by_name[$element->name] = $element;
}
}
然后,你可以这样搜索:
if(!empty($object_by_name['blue'])){
$blue_order = $object_by_name['blue']->order
}
答案 1 :(得分:0)
保持简单。
你写的代码太多了。
$array_list = ($array_list)?:[];
$array_list = array_filter($array_list,function($var) {
return ($var->name=="blue");
});
$order = ($array_list)? $array_list[0]->order :'';
快乐编码
答案 2 :(得分:0)
<?php
$arr = array(
array('id'=>1,'name'=>'blue','order'=>4),
array('id'=>2,'name'=>'green','order'=>6),
array('id'=>3,'name'=>'yellow','order'=>2),
);
// $json is JSON version of the arrays in $arr
$json = json_encode($arr);
// show $json
echo $json . "\n";
// create arrays from JSON so it can be used in PHP easier
$obj = json_decode($json);
$color = 'blue';
$blue_order = array_filter($obj, function($i) use ($color) { return $i->name == $color; })[0]->order;
echo "Blue Order: " . $blue_order;
您可以使用array_filter来帮助它成为一个单行。我包含了json_decode和json_encode,所以我可以有一个完整的例子。