我卡住了,试图从对象数组中获取特定值到新数组。
当我执行以下操作时,它会按预期返回所有可用的值:
<?php $speakers = array(); ?>
<?php foreach($item->extra_fields as $fieldname): ?>
<?php if ($fieldname->name == 'Speaker') : ?>
<?php $speakers[] = $fieldname->value; ?>
<?php endif; ?>
<?php endforeach; ?>
<pre><?php print_r($speakers); ?></pre>
当我尝试创建一个关联数组时,像下面这样,数组只有循环的最后一个值:
<?php $speakers = array(); ?>
<?php foreach($item->extra_fields as $fieldname): ?>
<?php if ($fieldname->name == 'Speaker') : ?>
<?php $speakers[$fieldname->alias] = $fieldname->value; ?>
<?php endif; ?>
<?php endforeach; ?>
<pre><?php print_r($speakers); ?></pre>
数组$item->extra_fields
看起来像这样:
Array
(
[1] => stdClass Object
(
[id] => 5
[name] => Speaker
[value] => Gudrun Timm
[type] => textfield
[group] => 2
[published] => 1
[ordering] => 2
[alias] => name
)
[2] => stdClass Object
(
[id] => 6
[name] => Credentials
[value] => Founder - Link Ideas! - Germany
[type] => textfield
[group] => 2
[published] => 1
[ordering] => 3
[alias] => credentials
)
[3] => stdClass Object
(
[id] => 7
[name] => Presentation TItle
[value] => My title is blablalba
[type] => textfield
[group] => 2
[published] => 1
[ordering] => 4
[alias] => title
)
[5] => stdClass Object
(
[id] => 16
[name] => Picture
[value] => Picture
[type] => image
[group] => 2
[published] => 1
[ordering] => 6
[alias] => picture
)
[8] => stdClass Object
(
[id] => 11
[name] => Speaker
[value] => Idar Kreutzer
[type] => textfield
[group] => 2
[published] => 1
[ordering] => 9
[alias] => name
)
[9] => stdClass Object
(
[id] => 12
[name] => Credentials
[value] => CEO - Finance Norway - Norway
[type] => textfield
[group] => 2
[published] => 1
[ordering] => 10
[alias] => credentials
)
)
欢迎任何建议:)
是这样解决的:
<?php $speakers = array();
foreach($item->extra_fields as $fieldname){
if ($fieldname->name == 'Speaker'){
$speakers[$fieldname->name][] = $fieldname->value;
}
} ?>
<pre><?php print_r($speakers); ?></pre>
您的代码完全按照您的要求工作。看看你正在循环的数据。您只处理数组中的name = 'Speaker'
项,其中有两个:key #1和key #8:
[1] => stdClass Object (
[name] => Speaker
[alias] => name
)
[8] => stdClass Object (
[name] => Speaker
[alias] => name
)
由于两个条目中的alias
值是相同的,您只需继续覆盖先前保存的条目,并以您遇到的最后一个条目结束。
我会这样做…
$speakers = array();
foreach($item->extra_fields as $fieldname)
if ($fieldname->name == 'Speaker') :
$speakers[$fieldname->id] = $fieldname->value;
endif;
endforeach;
这样你就可以用唯一的I'd存储它们。或者甚至使用这个名字?
$speakers[$fieldname->name]= $fieldname->value;
或者如果你需要别名值作为键。
$speakers[][$fieldname->alias]=$fieldname->value;
所有的扬声器都有相同的别名,所以它将它们全部添加到数组中,但是每个连续的条目都会覆盖前一个条目,最后只留下最后一个条目。