访问对象中的数组

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 

【讨论】:

以上是关于访问对象中的数组的主要内容,如果未能解决你的问题,请参考以下文章

访问数组中的 UIView 对象

使用猫鼬访问数组数组中的对象

如何访问 json 对象中的数组?

访问数组中的对象重新创建对象?

无法访问 JavaScript 对象数组 (React.js) 中的属性

访问 JSON 数组中的对象 (JavaScript) [重复]