0

$items という変数からデータを取得しようとしています

私が var_dump($items); - 結果は次のようになります。

array(13) { 

[0]=> object(stdClass)#868 (2) { 
        ["meta_key"]=> string(17) "Email of Attendee"        
        ["meta_value"]=> string(68) "some-email@gmail.com" 
} 

[2]=> object(stdClass)#804 (2) { 
        ["meta_key"]=> string(28) "Name to be printed on badge:" 
        ["meta_value"]=> string(7) "some name to be printed" 
}

...など、あと11回

次のようなコードで $items からメールを取得できるかどうかを知りたいです。

$email = $itemsmeta_key値を持つオブジェクトを見つけ"Email of Attendee"て、対応する値を返します。

私がやったことは$items、次のように foreach ループを実行することでした。

foreach($items as $item){

    $items[$item->meta_key]=$item->meta_value;

}

すべての「meta_keys」を参照していた値に変換します。今:

$email = $items["Email of Attendee"]  

echo $email; 

result is some-email@gmail.com

これを投稿すると、同様のジャムの他の誰かが、物事を変換する for each ループを使用する可能性があります

b. 経験豊富な誰かが、foreach ループを実行することなく、$items から直接「出席者の電子メール」を取得する方法を提案できます。

4

4 に答える 4

0

これで魔法がかかるはずです。

foreach($items as $item){

    // $item is already holding the object here. Equals to $items[0] in the first loop
    if($item->meta_key == "Email of Attendee"){
        // do stuff
    }

}
于 2013-04-06T04:49:41.430 に答える
0

Search Arrayから引用: array_filter vs loop :

array_filter()[多次元配列] をネイティブに処理できません。配列内の単一の値を探していますか? array_filter()探していた値が見つかったときに反復を停止できるため、これを行う最良の方法ではありarray_filter()ません-そうしません。大きなセットから一連の値をフィルター処理しますか? 組み込み関数であるためarray_filter()、手作業でコード化された -loop よりも高速である可能性が最も高いです。foreachステファン・ゲーリッグ

おそらく、 phpforeachループを使用する方が読みやすいでしょう。

function getItem($haystack, $needle) {
  foreach ($haystack as $hay) {
    if ($hay->meta_key == $needle) {
      return $hay->meta_value;
    }
  }
  return FALSE;
}

echo getItem($items, 'Email of Attendee'); // Returns 'some-email@gmail.com'

ただし、引用が想定しているように、より大きな配列の場合は、php のようなものを使用することをお勧めしますarray_filter()

function metaKeyIsEmail($obj) {
  return $obj->meta_key == 'Email of Attendee';
}

// array_filter() will return an array containing all items
// that returned TRUE for the callback metaKeyIsEmail()
$items_matched = array_filter($items, 'metaKeyIsEmail');

// If there was at least one match, take it off the front of
// the array and get its meta_value. Otherwise use FALSE.
$matched_value = !empty($items_matched) ? array_shift($items_matched)->meta_value : FALSE;

echo $matched_value; // Returns 'some-email@gmail.com'
于 2013-04-06T05:56:48.763 に答える
0

foreach は、配列だけでなく反復処理もできます。object

$given_array = array((object)array('meta_key'=>'email','mea_value'=>'fg'),
                     (object)array('meta_key'=>'email','mea_value'=>'gfdgf'));


foreach($given_array as $elt){
    foreach($elt as $key=>$value){
                if($key == "Email of Attendee"){
                    echo $email;
        }
}
于 2013-04-06T06:09:13.123 に答える
0

foreach ループの使用にまだ依存しています。

function get_email($items) {

    foreach($items as $item){

        if (in_array("Email of Attendee", $item) {
            $email = $item["meta_value"];
            break;
        }

    }
    return $email;
}

訂正 特定のオブジェクトを取得するにはarray_filter

$result = array_filter($array, function($o) {
                   return $o->meta_key == "Email of Attendee";
});

$email = $result[0]->meta_value;

echo $email;
于 2013-04-06T04:32:20.917 に答える