为什么这个语句只将最后一个值添加到新数组?


Why is this statement only adding the last value to the new array?

我卡住了,试图从对象数组中获取特定值到新数组。

当我执行以下操作时,它会按预期返回所有可用的值:

<?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;

所有的扬声器都有相同的别名,所以它将它们全部添加到数组中,但是每个连续的条目都会覆盖前一个条目,最后只留下最后一个条目。