【问题标题】:Convert onedimensional array into multidimensional array in php [duplicate]在php中将一维数组转换为多维数组[重复]
【发布时间】: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()。在您创建了一个以逗号分隔的放映时间列表后,当您想要展示数据时,只需在逗号上展开即可。这还可以让您根据电影名称对结果集进行排序,并且通常将大部分逻辑打包到您的查询中——这将是最容易阅读和管理的地方。下次您提出问题时,请务必包含您的最佳编码尝试——这是预期的。

标签: php arrays multidimensional-array


【解决方案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 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2023-03-26
    • 2019-06-29
    相关资源
    最近更新 更多