2017-10-18 22 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;

これではKinda mixed Jqueryです。しかし、あなたが理解してもらいたいと思います。今、私が持っている最高のは、これは、

for($i=0; $i<count($object); $i++){ 
if($object[$i]->name == "blue"){ 
    $blue_order = $object[$i]->order; 
} 
} 

これはしかし非常に非効率ですし、配列が非常に大きく、それが非常に遅くなりますをループであるので、私はループを使用したくないです。だから私はこれをどうやってやるの?

配列がnullの可能性があるため、foreachの代わりに "for"ループを使用しました。また配列要素の順序も常に同じではありません。

だから私は、あなたはまだforeachを使用しますが、配列はこのように、最初の空でないかどうかを確認でき

$object[0]->order 

答えて

0

ような何かすることはできません。また

if(!empty($object)){ 
    foreach($object as $element){ 
    if($element->name == "blue"){ 
     $blue_order = $element->order; 
    } 
    } 
} 

、あなたをコードが効率的に見えますが、私がおそらく追加するものは、値を見つけたらbreakです。

あなたのオブジェクトは、多くの情報を持っており、あなたが検索の多くをやろうとしている場合は、検索しやすく得るので、0

、あなたはこのように、いくつかの前処理を行うことができます:

$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 :''; 

あなたは、これはワンライナーになるためarray_filterを使用することができるかもしれ

+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; 

コーディングハッピー。 json_decodeとjson_encodeをインクルードしたので、完全な例が得られました。