我正在尝试从名为$ 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 = $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
这样发布 一个。类似果酱中的其他人可能会使用每个转换事物的循环
湾有经验的人可以建议一种方法来直接从$ items中获取“参与者的电子邮件”,而无需通过foreach循环运行它。
答案 0 :(得分: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;
答案 1 :(得分: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
}
}
答案 2 :(得分:0)
引自Search Array : array_filter vs loop:
array_filter()
无法原生处理[多维数组]。你在数组中寻找一个值?array_filter()
不是最好的方法,因为你可以在找到你一直在寻找的值时停止迭代 -array_filter()
不这样做。从较大的集合中过滤一组值?最有可能array_filter()
比手动编码的foreach
循环更快,因为它是内置函数。 - Stefan Gehrig
使用php foreach
loop可能更容易阅读:
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'
答案 3 :(得分: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;
}
}