访问对象中的数组
Posted
技术标签:
【中文标题】访问对象中的数组【英文标题】:Accessing an array in an object 【发布时间】:2013-01-23 12:36:43 【问题描述】:如果我知道要搜索的正确术语,很容易用谷歌搜索,但我不确定术语。
我有一个返回大对象的 API。我通过以下方式访问一个特定的:
$bug->fields->customfield_10205[0]->name;
//result is johndoe@gmail.com
有许多值,我可以通过将其从 0 更改为 1 等来访问它们
但我想遍历数组(也许这不是正确的术语)并获取其中的所有电子邮件并将其添加到这样的字符串中:
implode(',', $array);
//This is private code so not worried too much about escaping
会以为我只是做类似的事情: echo implode(',', $bug->fields->customfield_10205->name);
也试过了 echo implode(',', $bug->fields->customfield_10205);
并且 echo implode(',', $bug->fields->customfield_10205[]->name);
我正在寻找的输出是: 'johndoe@gmail.com,marydoe@gmail.com,patdoe@gmail.com'
我哪里错了,我提前为这个愚蠢的问题道歉,这可能是新手
【问题讨论】:
这是一个 SimpleXML 对象吗?是否有可能var_dump()
$bug->fields->customfield_10205
的值?
你会得到什么输出呢?如果这是 SimpleXML,则这些不是真正数组,因此您可以使用[]
和foreach
访问它们,但不能使用数组函数。
【参考方案1】:
你需要一个迭代,比如
# an array to store all the name attribute
$names = array();
foreach ($bug->fields->customfield_10205 as $idx=>$obj)
$names[] = $obj->name;
# then format it to whatever format your like
$str_names = implode(',', $names);
PS:您应该寻找属性电子邮件而不是名称,但是,我只是按照您的代码进行
【讨论】:
【参考方案2】:使用此代码,并循环遍历数组。
$arr = array();
for($i = 0; $i < count($bug->fields->customfield_10205); $i++)
$arr[] = $bug->fields->customfield_10205[$i]->name;
$arr = implode(','$arr);
【讨论】:
【参考方案3】:如果不使用额外的循环和临时列表,这在 php 中是不可能的:
$names = array();
foreach($bug->fields->customfield_10205 as $v)
$names[] = $v->name;
implode(',', $names);
【讨论】:
【参考方案4】:你可以像这样使用array_map
函数
function map($item)
return $item->fields->customfield_10205[0]->name;
implode(',', array_map("map", $bugs)); // the $bugs is the original array
【讨论】:
以上是关于访问对象中的数组的主要内容,如果未能解决你的问题,请参考以下文章