【问题标题】:Laravel Collection. Combine same keyLaravel 集合。组合相同的键
【发布时间】:2019-04-20 13:47:19
【问题描述】:

我想在 Laravel 集合中组合相同的键,它们存储在一个数组中。

我无法为这样的转变“发明”一个适当的简洁和简短的管道。

数据数组

示例结果

【问题讨论】:

  • 我们并不真正了解您想要什么。
  • 我想把两个数组中的时间作为结果示例。
  • 前。 $key "mon" 有数组 3 => "12.00", 4 => "12.00", 5 => "12.00" 来自数组 0 和数组 3 => "12.00", 4 => "12.00", 5 => " 12.00" 从数组 1 合并到 "mon" => 数组 (3 => "12.00 - 12.00", 4 => "12.00 - 12.00", 5 => "12.00 - 12.00")
  • 仍然很难理解您的问题...您是否有一个包含事件开始时间的数据结构,以及另一个包含事件结束时间的数据结构,并且您想制作第三个数据结构,其中每个事件的开始和结束时间组合在一个字符串中?
  • 要添加说明,请编辑问题。请不要放在 cmets 中。

标签: php laravel laravel-5.4 laravel-collection


【解决方案1】:

看起来你有两个相等的数组,你需要 concat [0] 和 [1] 键来表示工作日(从 - 到)。这是您的集合作为数组的解决方案:

<?php

$youHaveArray = [
    0 => [
        'mon' => [
            3 => '10:00',
            4 => '11:00',
            5 => '12:00',
        ],
        'tue' => [
            3 => '11:00',
            4 => '12:00',
        ],
    ],
    1 => [
        'mon' => [
            3 => '10:30',
            4 => '11:30',
            5 => '12:30',
        ],
        'tue' => [
            3 => '11:30',
            4 => '12:30',
        ],
    ]
];

$daysOfWeekYouHave = array_keys($youHaveArray[0]) + array_keys($youHaveArray[1]);
$weekFormated = [];

foreach ($daysOfWeekYouHave as $dayName) {

    if (! isset($weekFormated[$dayName])) {
        $weekFormated[$dayName] = [];
    }

    if (isset($youHaveArray[0][$dayName])) {
        foreach ($youHaveArray[0][$dayName] as $dayKey => $dayStart) {
            if (isset($youHaveArray[1][$dayName][$dayKey])) {
                $dayEnd = $youHaveArray[1][$dayName][$dayKey];
                $weekFormated[$dayName][$dayKey] = $dayStart.' - '.$dayEnd;
            }
        }
    }
}

var_dump($weekFormated);

结果是:

array(2) {
'mon' =>
array(3) {
    [3] =>
    string(13) "10:00 - 10:30"
    [4] =>
    string(13) "11:00 - 11:30"
    [5] =>
    string(13) "12:00 - 12:30"
}
'tue' =>
array(2) {
    [3] =>
    string(13) "11:00 - 11:30"
    [4] =>
    string(13) "12:00 - 12:30"
}
}

【讨论】:

  • 你可以使用$yourCollection-&gt;toArray();方法来节省内存。
【解决方案2】:
$result = array();

//$data is array which contains the stdClass

foreach ($data as $key => $value) {

 $name = $value->video_id;

 if (!isset($result[$name])) {
  $result[$name] = [];
 }

 $result[$name]['video_id'] = $value->video_id;
 $result[$name]['video_name'] = $value->video_name;
 $result[$name]['category_type'][] = [
  'category_id' => $value->category_id,
  'category_name' => $value->category_name,
 ];
}

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 2011-10-14
    • 2018-09-18
    • 2017-03-07
    • 1970-01-01
    • 2020-09-13
    相关资源
    最近更新 更多