我正在尝试从一个名为$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;
}
}