如何从数组内的对象中获取值



我正在尝试从一个名为$items的变量中获取数据

当I 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 = $items找到meta_key值为"Email of Attendee"的对象,然后返回相应的值给我。

我最终做的是通过foreach循环运行$items,如下所示:

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

张贴这个以便a.遇到类似情况的其他人可能会使用for each循环来转换

b。有经验的人可以建议一种方法,直接从$项中获取"与会者的电子邮件",而不必通过foreach循环。

这应该会很神奇。

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

仍然依赖于foreach循环的使用。

function get_email($items) {
    foreach($items as $item){
        if (in_array("Email of Attendee", $item) {
            $email = $item["meta_value"];
            break;
        }
    }
    return $email;
}

<修正/strong>您可以使用array_filter

获取特定对象
$result = array_filter($array, function($o) {
                   return $o->meta_key == "Email of Attendee";
});
$email = $result[0]->meta_value;
echo $email;

引用自Search Array: array_filter vs loop:

array_filter()无法本地处理[多维数组]。你在数组中寻找单个值?array_filter()不是这样做的最好方法,因为当你找到你一直在寻找的值时,你可以停止迭代- array_filter()不这样做。从较大的集合中筛选一组值?最有可能的是,array_filter()比手工编码的foreach循环更快,因为它是一个内置函数。——Stefan Gehrig

使用php foreach循环可能更容易阅读:

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'

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

相关内容

  • 没有找到相关文章