可能这个问题是重复的,因为我不知道如何描述问题来找到答案.
>日期包含unix时间戳,
>事件是包含事件ID的arrya,
> Tags是一个包含事件标签的数组(如果数字不是单独的,则以逗号分隔的字符串).
这是数组:
Array
(
[date] => 1554328800
[events] => Array
(
[0] => 130
[1] => 131
[2] => 163
)
[tags] => Array
(
[0] => 4
[1] => "1,3,4"
[2] => "1,3"
)
)
事件和标签之间的关系在键中,因此具有位置0的事件130具有标签4.
如您所见,有一些标签重复(事件130和131或131和163).
我怎么能得到一个只有这样重复事件的数组:
Array
(
[0] => Array
(
[date] => 1554328800
[events] => Array
(
[0] => 130
[1] => 131
)
[tags] => 4
)
[1] => Array
(
[date] => 1554328800
[events] => Array
(
[0] => 131
[1] => 163
)
[tags] => Array
(
[0] => 1
[1] => 3
)
)
)
解决方法:
我将如何做到这一点:
>列出每个标签的事件
这将提供几组事件,可以在下一步中使用
>列出上一步中发生的每组事件的标签
>从第2步生成结果
// Sample input
$data = [
"date" => 1554328800,
"events" => [130, 131, 163],
"tags" => [4, "1,3,4", "1,3"]
];
// 1. List the events per individual tag
foreach($data["tags"] as $i => $val) {
$vals = explode(",", $val);
foreach($vals as $val) {
$eventsByTag[$val][] = $data["events"][$i];
}
}
// 2. List the tags per set of events
foreach($eventsByTag as $tag => $events) {
sort($events, SORT_NUMERIC);
$tagsByEvents[implode(",", $events)][] = $tag;
}
// 3. produce the result
foreach($tagsByEvents as $events => $tags) {
$events = explode(",", $events);
if (count($tags) == 1) $tags = $tags[0];
$result[] = [
"date" => $data["date"],
"events" => $events,
"tags" => $tags
];
}
print_r($result);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。