检查数组php

时间:2019-04-21 14:36:15

标签: php arrays data-synchronization

我有这段代码,该代码显示带有视频文件链接的徽标。我经常上传文件,并且想保持秩序。目前,它只是按名称顺序附加它们。因此,例如,如果我上传电影而又没有上传名称完全相同的照片,那么从那时起,所有照片上都将显示不匹配的链接。

我想做的是如果名字不匹配,则显示一张临时照片。

我知道您可以执行类似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↰__对正确
  • Movie1.png↲
  • Movie2.m4v↰__对正确
  • Movie2.png↲
  • Movie3.mp4↰__不正确的配对
  • Movie4.mp4↲
  • Movie4.png←-没有与之配对的图像

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

1 个答案:

答案 0 :(得分:2)

使用$header = ['time','machine1','machine2']; $html = "<table border='1'><tr>"; for($i=0; $i<count($header); $i++){ $html.= "<th>".$header[$i]."</th>"; } $res = [ array_merge( array_column($data1, 'reading','time') ), array_merge( array_column($data2, 'reading','time') ) ]; for($i=0;$i<count($res)-1;$i++){ foreach($res[$i] as $key => $value){ $html .= '<tr>'; $html .= '<td>'.$key.'</td>'; $html .= '<td>'.$res[$i][$key].'</td>'; $html .= '<td>'.$res[$i+1][$key].'</td>'; $html .= '</tr>'; } } echo $html; 构造一个查找数组,以方便验证。查找数组使用“无扩展名”电影文件名作为键,并与图像文件名(具有扩展名)配对。

如果您的项目逻辑指出电影总是比图像多,那么应该循环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