在php中将一维数组转换为多维数组[重复]

Posted

技术标签:

【中文标题】在php中将一维数组转换为多维数组[重复]【英文标题】:Convert onedimensional array into multidimensional array in php [duplicate] 【发布时间】:2020-08-10 03:22:01 【问题描述】:

我有一个数组,其中包含电影信息以及它们将在电影院放映的时间。每次放映都是另一个结果,因此一部电影可以多次出现在阵列中。我想将重复的电影条目合并为一个,并将所有节目放在新数组的另一个维度中。格式是这样的:

Array (
[title] => title
[synopsis] => synopsis
[poster] => poster
[cast] => cast
[director] => director
[length] => length
[rating] => rating
[datetime] => datetime )

应格式化为:

Array (
[title] => title
[synopsis] => synopsis
[poster] => poster
[cast] => cast
[director] => director
[length] => length
[rating] => rating
[datetime] => Array
( [0] => datetime0
  [1] => datetime1    
... )
)

有没有人知道如何在“标题”之后将它组合起来,并将日期时间的所有条目放在一个新的维度中。 感谢您的帮助!

【问题讨论】:

您是从数据库中获取这些数据吗?如果是,你为什么不使用SELECT * from films GROUP BY title @nelsonrakson 好点,但作者可能会从其他类型的数据库中读取此数据。 我正在从数据库中获取它们。从两张桌子tbh。一张表是电影的详细信息,另一张表是电影每次放映的日期时间。我可以按标题分组,但必须使用 foreach 并获取每部电影的节目。 用 sql 对这些数据进行分组更直接、更专业。您不需要执行任何迭代查询。您在 SELECT 中使用 GROUP BYGROUP_CONCAT()。在您创建了一个以逗号分隔的放映时间列表后,当您想要展示数据时,只需在逗号上展开即可。这还可以让您根据电影名称对结果集进行排序,并且通常将大部分逻辑打包到您的查询中——这将是最容易阅读和管理的地方。下次您提出问题时,请务必包含您的最佳编码尝试——这是预期的。 【参考方案1】:

假设title 是唯一的(没有两部电影具有相同的标题)。那么这将起作用:

$newArray = [];
foreach ($array as $element) 
    if (array_key_exists($element['title'], $newArray)) 
        $newArray[$element['title']]['datetime'][] = $element['datetime'];
     else 
        $element['datetime'] = [$element['datetime']];
        $newArray[$element['title']] = $element;
    

$newArray = array_values($newArray);

但是,正如其他 cmets 指出的那样,这不是最佳解决方案,您可能需要考虑数据库结构或在 SQL 中使用 CONCAT 之类的东西来返回由符号分隔的日期列表,然后使用 @ 987654324@ 在 php 中。

【讨论】:

以上是关于在php中将一维数组转换为多维数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中将多维数组转换为 XML 对象 [重复]

在 PHP 中将多维关联数组展平为一维引用数组

php PHP array_flatten()函数。将多维数组转换为一维数组。

php中一维或多维数组去除重复项

thinkphp怎么将多维数组变成一维数组

将多维数组转换为一维数组的算法