检查数组中的相似文本 php

Check for similar text in arrays php

我有这段代码可以将带有 link 的徽标显示到视频文件中。我经常上传文件,我想保持思路井井有条。目前它只是按名称顺序附加它们。因此,例如,如果我上传了一部电影,但还没有开始上传名称完全相同的照片,那么从那时起,任何照片都将显示不匹配的 links.

我想做的是在名称不匹配时显示一张临时照片。

我知道您可以执行类似 if(array[1] === array2[1]) 的操作,但文件扩展名会有所不同,因此每次都会 return 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 多张照片):

目录 1

当它运行时,它会并排显示 3 张照片,单击前 2 张照片 (Movie1.png && Movie2.png) 时,您会被带到正确的电影中。但是,当您单击 "Movie 4.png" 时,您将转到 "Movie3.mp4"。

使用pathinfo($filename, PATHINFO_FILENAME)构造一个查找数组,方便验证。查找数组使用 "extensionless" 电影文件名作为与图像文件名(及其扩展名)配对的键。

如果您的项目逻辑表明电影总是多于图像,您应该循环 $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