php - 使用 array_diff_assoc 比较两个数组

标签 php mysql

我想将 $image = $row['colum1 ']$file = readdir($dh) 进行比较,但它似乎不适用于 $compare = array_diff_assoc($image, $uploads); 有什么想法吗?

<?php
//pulling images from mysql colum1
require 'databaseConnection.php'
$result = mysqli_query($conn, "SELECT column1 FROM table1");
while ($row = mysqli_fetch_array($result)) {
    $image = $row ['colum1'] . "<br/>";
}

//pulling pictures from specific path
$dir = "application/uploads";
if(is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            $uploads = $file . "<br>";
       }
    }
}

//attempting to compare $image to $upload
$compare = array_diff_assoc($image, $uploads);
print_r($compare);

最佳答案

我猜测您在这里真正想要的是 array_diff() 而不是 array_diff_assoc(),因为后者比较两个值(value)观,而前者只关注值(value)观。我无法想象为什么键与您的用例相关。

您犯了一些错误,因为您的 readdir() 循环只是将字符串存储在变量 $uploads 中(您正在覆盖循环每次迭代的值),并且 $images (每次迭代也会被覆盖)将存储给定行的列数组那次迭代。

可能想要做的是获取表中仅存储文件名的一列的数组,并将其与磁盘上的文件名数组进行比较。

使用arary_diff()时要记住的重要一点是顺序很重要,因为结果是第一个数组中的值列表,这些值不存在于任何其他数组中。这意味着您必须问自己,您想知道数据库中的哪些文件不在磁盘上,还是想知道磁盘上的哪些文件不在数据库中?

这是一个short gist on how to visualize the different array operations in PHP .

$array1 = [
    "red",
    2,
    "green",
    "blue",
];

$array2 = [
    "orange",
    "green",
    "blue",
    "red",
];

$diff = array_diff($array1, $array2);

var_dump($diff);

array_diff

因此,我们假设您在代码中执行了以下操作:

<?php
//pulling images from mysql colum1
require 'databaseConnection.php'
$result = mysqli_query($conn, "SELECT column1 FROM table1");

$images = []; // store a list of images from the database

while ($row = mysqli_fetch_array($result)) {
    $images[] = $row['colum1'];
}

//pulling pictures from specific path
$dir = "application/uploads";

$uploads = []; // store a list of files on disk

if(is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            $uploads[] = $file;
       }
    }
}

//attempting to compare $image to $upload
$compare = array_diff($images, $uploads);
print_r($compare);

如果$images$uploads的结果如下:

$images  = ["a.jpg", "b.jpg", "c.jpg"];
$uploads = ["a.jpg", "b.jpg"];

那么 $compare 的结果应该是 ["c.jpg"] 因为它是 $images 中存在的唯一值,即不存在于 $uploads 中。

关于php - 使用 array_diff_assoc 比较两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59934362/

相关文章:

php - Plesk,启用相同版本的多个 PHP 实例

php - Laravel 5 全局增删改查类

javascript - 重新使用一个 jquery 函数,为它提供一个 php 变量而不是 html

php - mysql_insert_id 使用安全吗?

mysql - SQL UPDATE with Replace 在替换语句中抛出 1064 错误

mysql - Laravel-从下拉列表中选择值后自动填充输入

php - 如何将对象属性添加到对象的属性中?

php - 如何在 Laravel 5.3 中创建两次连接到表的查询?

php - 如何制作表格并保存url和html代码?

"or"语句中的 MySQL 索引