PHP - 访问一个数组元素的属性的最佳方式是什么?
我有一个对象,它是一个JSON对象数组。有点像这个,PHP - 访问一个数组元素的属性的最佳方式是什么?
$object = [
{
"id":1,
"name":"blue",
"order":4
},
{
"id":2,
"name":"green",
"order":6
},
{
"id":3,
"name":"yellow",
"order":2
}
]
我想访问属性以简单的方式和单行也许这样,
说,如果我想要的对象的“秩序”与名“蓝“
$ 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
你仍然可以使用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
}
保持简单。
你写的方式太多的代码。
$array_list = ($array_list)?:[];
$array_list = array_filter($array_list,function($var) {
return ($var->name=="blue");
});
$order = ($array_list)? $array_list[0]->order :'';
快乐编码
Theres已经是一个php过滤器函数。用户它。 –
嗯..有趣。我不知道。感谢您的知识 –
<?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,所以我可以有一个完整的例子。
hmmmm ...我喜欢你的预处理想法。我想我会试试这个。谢谢 –
很酷,让我们知道它是怎么回事 – Piyin
尽管我使用的数组非常大(而且我的意思是非常大),创建另一个这样的数组将会有点低效。但我想这是我现在最好的。 –