Проверьте на наличие аналогичного текста в массивах php - PullRequest
1 голос
/ 21 апреля 2019

У меня есть этот код, который отображает логотипы со ссылкой на видеофайл.Я часто загружаю файлы и хочу держать мысли в порядке.На данный момент он просто прикрепляет их в порядке названия.Так, например, если я загружаю фильм и не удосужился загрузить фотографию с точно таким же именем, то с этого момента любые фотографии будут отображаться с несовпадающими ссылками.

Что я хотел бы сделатьотображает временную фотографию, если имя не совпадает.

Я знаю, что вы можете сделать что-то вроде if (array [1] === array2 [1]), но расширения файла будут другими, чтобыкаждый раз возвращать false.

Код:

<?php
$images = glob('./*.{jpeg,jpg,png}', GLOB_BRACE);
$movies = glob('./*.{mp4,m4v}', GLOB_BRACE);
$movieLink = 0;

foreach($images as $image) {
    echo '<a href="' .$movies[$movieLink].'">
            <img src="'.$image.'" style="width:300px;height:350px;border:0;">
        </a>';
    $movieLink++;
}

?>

Пример каталога сервера (400+ фильмов и> 30 фотографий):

Dir1

  • Movie1.mp4 correct__ правильная пара
  • Movie1.png ↲
  • Movie2.m4v ↰__ правильная пара
  • Movie2.png ↲
  • Movie3.mp4 ↰__ неверная пара
  • Movie4.mp4 ↲
  • Movie4.png ← - нет изображения для сопряжения с

При запуске отображается 3 фотографии рядомсторона, при нажатии на первые 2 (Movie1.png && Movie2.png) вы попадаете на правильный фильм для каждого.Однако, когда вы нажимаете «Movie 4.png», вы переходите в «Movie3.mp4».

1 Ответ

2 голосов
/ 21 апреля 2019

Используйте pathinfo($filename, PATHINFO_FILENAME) для создания массива поиска для легкой проверки.В массиве поиска в качестве ключей используются имена файлов фильмов «без расширений», которые связаны с именем файла изображения (с его расширением).

Вы должны зацикливать массив $movies, если логика вашего проекта утверждает, что всегда будетбольше фильмов, чем изображений.

$movies = glob('./*.{mp4,m4v}', GLOB_BRACE);
$images = glob('./*.{jpeg,jpg,png}', GLOB_BRACE);
foreach ($images as $image) {
    $lookup[pathinfo($image, PATHINFO_FILENAME)] = $image;
}

foreach ($movies as $movie) {
    $image = $lookup[pathinfo($movie, PATHINFO_FILENAME)] ?? 'default.jpg';
    echo '<a href="' . $movie . '">
            <img src="' . $image . '" style="width:300px;height:350px;border:0;">
        </a>';
}

Приведенный выше фрагмент кода не тестировался, но он должен быть довольно близок.Если вы незнакомы, ?? - это оператор слияния.Он в основном говорит: присвойте значение поиска, если оно отсутствует, в этом случае используйте значение по умолчанию.

Вот демонстрация конструкции массива поиска: https://3v4l.org/HJhVR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...