组数组项通过键值添加与分组值的关联元素

问题描述 投票:0回答:2
the以下数组:

$a = [ "category" => "Music", "items" => [ ["ID" => "1", "start_date" => "2018-11-20", "end_date" => "2018-11-28"], ["ID" => "2", "start_date" => "2018-11-22", "end_date" => "2018-11-28"], ["ID" => "3", "start_date" => "2018-11-26", "end_date" => "2018-11-30"], ["ID" => "4", "start_date" => "2018-11-27", "end_date" => "2018-11-31"], ["ID" => "4", "start_date" => "2018-11-29", "end_date" => "2018-11-31"] ] ];
我想通过

end_date

end_dateend_date
来“分组”阵列,但不使用
array( "category" => "Music", "items" => array( array( "date" => "2018-11-28", array("ID" => "1", "start_date" => "2018-11-20", "end_date" => "2018-11-28"), array("ID" => "2", "start_date" => "2018-11-22", "end_date" => "2018-11-28"), ), array( "date" => "2018-11-30", array("ID" => "3", "start_date" => "2018-11-26", "end_date" => "2018-11-30") ), array( "date" => "2018-11-31", array("ID" => "4", "start_date" => "2018-11-27", "end_date" => "2018-11-31"), array("ID" => "4", "start_date" => "2018-11-29", "end_date" => "2018-11-31") ) ) ); 作为键,就像我在其他postsforums
中所看到的那样,而是通过将
$a = array("category" => "Music", "items" => array( array("ID" => "1", "start_date" => "2018-11-20", "end_date" => "2018-11-28"), array("ID" => "2", "start_date" => "2018-11-22", "end_date" => "2018-11-28"), array("ID" => "3", "start_date" => "2018-11-26", "end_date" => "2018-11-30"), array("ID" => "4", "start_date" => "2018-11-27", "end_date" => "2018-11-31"), array("ID" => "4", "start_date" => "2018-11-29", "end_date" => "2018-11-31") ) ); foreach($a['items'] as $item){ $new[$item['end_date']]['date'] = $item['end_date']; $new[$item['end_date']][] = $item; } $res = $a; unset($res['items']); $res['items'] = array_values($new); var_dump($res);

的值添加为一个值一个新键 因此,预期的结果将是:

array(2) { ["category"]=> string(5) "Music" ["items"]=> array(3) { [0]=> array(3) { ["date"]=> string(10) "2018-11-28" [0]=> array(3) { ["ID"]=> string(1) "1" ["start_date"]=> string(10) "2018-11-20" ["end_date"]=> string(10) "2018-11-28" } [1]=> array(3) { ["ID"]=> string(1) "2" ["start_date"]=> string(10) "2018-11-22" ["end_date"]=> string(10) "2018-11-28" } } [1]=> array(2) { ["date"]=> string(10) "2018-11-30" [0]=> array(3) { ["ID"]=> string(1) "3" ["start_date"]=> string(10) "2018-11-26" ["end_date"]=> string(10) "2018-11-30" } } [2]=> array(3) { ["date"]=> string(10) "2018-11-31" [0]=> array(3) { ["ID"]=> string(1) "4" ["start_date"]=> string(10) "2018-11-27" ["end_date"]=> string(10) "2018-11-31" } [1]=> array(3) { ["ID"]=> string(1) "4" ["start_date"]=> string(10) "2018-11-29" ["end_date"]=> string(10) "2018-11-31" } } } }
    
php arrays multidimensional-array grouping sub-array
2个回答
2
投票
loop阵列并构建一个临时关联数组,将结束日期作为键。 然后复制原始数组并取消设置“项目”并添加新的临时数组值。

items

输出:
$array['items']

Https://3v4l.org/fokl7

您可以使用功能风格的编程来分组和重新索引

0
投票
子阵列,而无需声明全球空间中的任何临时变量。

当您迭代每一行时,请使用临时键进行分组并将行推入各自组。 完成分组后,将数据重新索引。

代码:(
demo

$array = [
    "category" => "Music", 
    "items" => [
        ["ID" => "1", "start_date" => "2018-11-20", "end_date" => "2018-11-28"],
        ["ID" => "2", "start_date" => "2018-11-22", "end_date" => "2018-11-28"],
        ["ID" => "3", "start_date" => "2018-11-26", "end_date" => "2018-11-30"],
        ["ID" => "4", "start_date" => "2018-11-27", "end_date" => "2018-11-31"],
        ["ID" => "4", "start_date" => "2018-11-29", "end_date" => "2018-11-31"]
    ]
];

$array["items"] = array_values(
    array_reduce(
        $array["items"],
        function ($carry, $row) {
            $carry[$row["end_date"]]["data"] = $row["end_date"];
            $carry[$row["end_date"]][] = $row;
            return $carry;
        }
    )
);
var_export($array);
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.