检查数组中的相似文本 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
- Movie1.mp4 ↰__ 正确对
- Movie1.png↲
- Movie2.m4v ↰__ 正确对
- Movie2.png↲
- Movie3.mp4 ↰__ 错误对
- Movie4.mp4 ↲
- Movie4.png ←-- 没有要配对的图片
当它运行时,它会并排显示 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
我有这段代码可以将带有 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
- Movie1.mp4 ↰__ 正确对
- Movie1.png↲
- Movie2.m4v ↰__ 正确对
- Movie2.png↲
- Movie3.mp4 ↰__ 错误对
- Movie4.mp4 ↲
- Movie4.png ←-- 没有要配对的图片
当它运行时,它会并排显示 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