Отображать разные данные каждые два столбца

У меня есть эти изображения и видео данные, которые я сохранил в массиве.

Array
(
    [0] => Array
        (
            [id] => 81
            [media] => Array
                (
                    [0] => Array
                        (
                            [file_type] => 2
                            [file_name] => accident-damaged-car-5be9304f2b429.png
                        )

                    [1] => Array
                        (
                            [file_type] => 2
                            [file_name] => xdamaged-car-640x360jpgpagespeedicsgjldiwfmp-5be930504fb14.jpg
                        )

                    [2] => Array
                        (
                            [file_type] => 1
                            [file_name] => broken-car-5be9305055d13.mp4
                        )

                )

        )

    [0] => Array
        (
            [id] => 82
            [media] => Array
                (
                    [0] => Array
                        (
                            [file_type] => 2
                            [file_name] => accident-damaged-car-5be9304f2b340.png
                        )

                    [1] => Array
                        (
                            [file_type] => 1
                            [file_name] => broken-car-5be9305055d14.mp4
                        )

                )
        )
)

Поэтому я хотел показывать изображения и видео с перерывами каждые 2 столбца. Например, первые 2 столбца будут отображать изображения, а следующие 2 столбца - видео, а следующие 2 столбца - изображения и т. Д. Вывод должен быть таким, как на картинке ниже.

Я буду использовать данные и фильтровать их по file_type (1=video, 2=image), Но как я должен отображать их, как на картинке?

PS: Каждые данные содержат несколько изображений и видео, но я хочу отображать только 1 изображение или 1 видео, которое будет отображаться при их отображении.

1 ответ

Решение

Вы можете циклически перебирать массив и выбирать каждый раз тип медиа в соответствии с Mod 4 вашей текущей позиции.

Рассмотрим следующий код:

function getFileNameByType($files, $type) {
    foreach($files as $file)
        if ($file["file_type"] == $type)
            return $file["file_name"];
}

$ans = array();
foreach($arr as $elem){
    $type = (count($ans) % 4 == 0 || count($ans) % 4 == 1) ? "2" : "1";
    $ans[] = getFileNameByType($elem["media"] ,$type);
}

Если вы введете это в качестве ввода:

$arr = array(array("id"=>82, "media"=>array(array("file_type"=>2, "file_name"=> "aaa.png"), array("file_type"=>2, "file_name"=> "bbb.jpg"), array("file_type"=>1, "file_name"=> "ccc.mp4"))), array("id"=>83, "media"=>array(array("file_type"=>2, "file_name"=> "ddd.png"), array("file_type"=>1, "file_name"=> "eee.mp4"))), array("id"=>84, "media"=>array(array("file_type"=>2, "file_name"=> "fff.png"), array("file_type"=>2, "file_name"=> "ggg.jpg"), array("file_type"=>1, "file_name"=> "hhh.mp4"))), array("id"=>85, "media"=>array(array("file_type"=>2, "file_name"=> "iii.png"), array("file_type"=>2, "file_name"=> "jjj.jpg"), array("file_type"=>1, "file_name"=> "kkk.mp4"))));

Вы получите вывод:

Array
(
    [0] => aaa.png
    [1] => ddd.png
    [2] => hhh.mp4
    [3] => kkk.mp4
)

Надеюсь, это поможет!

Другие вопросы по тегам