2017-10-18 133 views
1

我有一个对象,它是一个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 

回答

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 
} 
+0

hmmmm ...我喜欢你的预处理想法。我想我会试试这个。谢谢 –

+0

很酷,让我们知道它是怎么回事 – Piyin

+0

尽管我使用的数组非常大(而且我的意思是非常大),创建另一个这样的数组将会有点低效。但我想这是我现在最好的。 –

0

保持简单。

你写的方式太多的代码。

$array_list = ($array_list)?:[]; 
$array_list = array_filter($array_list,function($var) { 
    return ($var->name=="blue"); 
}); 
$order = ($array_list)? $array_list[0]->order :''; 

快乐编码

+0

Theres已经是一个php过滤器函数。用户它。 –

+1

嗯..有趣。我不知道。感谢您的知识 –

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,所以我可以有一个完整的例子。

相关问题