从查询结果创建数组并将多个值推送到关联键

问题描述 投票:0回答:2

我有一个查询结果的对象。每个结果都有两列:缩写和文本。我需要创建一个新数组,我想要存储“text”列中的值,这些值按“缩写”列中的值分组。

我试过这个:

foreach ($results as $result) {
  $results_by_book_abbreviation[$result->abbreviation] = $result->text;
}

我得到的是一个包含多个键的数组,但每个键只有一个值,但我的对象有多个具有相同键的值。

它在PHP 5.5.38中工作,现在我有PHP 7.0.13

php
2个回答
2
投票

数组KEYS是UNIQUE,所以如果你多次加载一个键,你每次都会覆盖它的内容。

所以在这样的$results_by_book_abbreviation[$result->abbreviation]下面创建一个数组

foreach ($results as $result) {
    $results_by_book_abbreviation[$result->abbreviation][] = $result->text;
        //                            the change        ^^
}

这在任何版本的PHP中都是错误的,因此它与您更改运行此代码的PHP版本无关


1
投票

您需要创建一个数组数组,如下所示:

foreach ($results as $result) 
{
   if(!isset($results_by_book_abbreviation[$result->abbreviation]))
   {
        $results_by_book_abbreviation[$result->abbreviation] = array();
   }
   $results_by_book_abbreviation[$result->abbreviation][] = $result->text;
}
© www.soinside.com 2019 - 2024. All rights reserved.