2017-10-18 46 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,所以我可以有一個完整的例子。

相關問題