在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 BY
和 GROUP_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中将一维数组转换为多维数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章