检查数组php中的类似文本

问题描述 投票:1回答:1

我有这个代码,显示带有视频文件链接的徽标。我经常上传文件,我想按顺序保持思考。目前它只是按名称顺序附上它们。因此,例如,如果我上传电影并且没有上传具有完全相同名称的照片,那么从那一点开始,任何照片都会显示不匹配的链接。

我想做的是如果名称不匹配则显示临时照片。

我知道你可以做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张照片):

方向1

  • Movie1.mp4↰__正确对
  • Movie1.png↲
  • Movie2.m4v↰__正确对
  • Movie2.png↲
  • Movie3.mp4↰__不正确的一对
  • Movie4.mp4↲
  • Movie4.png← - 没有配对的图像

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

php arrays data-synchronization
1个回答
2
投票

使用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

© www.soinside.com 2019 - 2024. All rights reserved.