首页 > 解决方案 > 希望获得用于视频 ID 的通用标签(逗号分隔)

问题描述

这是我从请求中得到的数组。

$allTags = [
            0 =>  [
                "name" => "TAG-ONE",
                "video" => "64070,64076,64110,64111",
            ],
            1 => [
                "name" => "TAG-TWO",
                "video" => "64070,64076,64110,64111",
            ],
            2 => [
                "name" => "TAG-THREE",
                "video" => "64111",
            ]
        ];

我想获取用于所有视频 id 的通用标签名称,它们以逗号分隔。

预期产出

$allTagsResult = [
            0 =>  [
                "name" => "TAG-ONE,TAG-TWO",
                "video" => "64070",
            ],
            1 =>  [
                "name" => "TAG-ONE,TAG-TWO",
                "video" => "64076",
            ],
            2 =>  [
                "name" => "TAG-ONE,TAG-TWO",
                "video" => "64110",
            ],
            3 =>  [
                "name" => "TAG-ONE,TAG-TWO,TAG-THREE",
                "video" => "64111",
            ],
        ];

不知何故,我确实使用嵌套循环检查值,但我想知道你们是否可以建议任何最短的方法来获得预期的输出。

标签: phparraysfor-loopfilterforeach

解决方案


如果您不喜欢循环,另一种方法:

$video_ids = array_flip(array_unique(explode(",",implode(",",array_column($allTags,'video')))));

$result = array_map(function($id){
    return ['name' => '','video' => $id];
},array_flip($video_ids));

array_walk($allTags,function($tag_data) use (&$result,&$video_ids){
    $ids = explode(",",$tag_data['video']);
    foreach($ids as $id) $result[$video_ids[$id]]['name'] = empty($result[$video_ids[$id]]['name']) ? $tag_data['name'] : $result[$video_ids[$id]]['name'] . "," . $tag_data['name'];
});

演示: https ://3v4l.org/vlIks


推荐阅读