php - 使用 array_diff 比较关联数组和数值数组

标签 php mysql arrays multidimensional-array

Array1是一个关联数组,包含从MySQL获取的多个列表,Array2是一个数值数组,即一个简单数组。 Array2有list_ids,用于过滤Array1。

数组 1 的示例:

Array (
    [0] => Array (
        [id] => 1
        [list_id] => 68
        [list_value] => List-68
        [subject] => "abc"
        [message] => "abc"
        [obj_var] => "abc"
        [url_link] => "abc"
        [list_time] => 2014-05-13 22:04:04
    )
    [1] => Array (
        [id] => 2
        [list_id] => 69
        [list_value] => List-69
        [subject] => "abc"
        [message] => "abc"
        [obj_var] => "abc"
        [url_link] => "abc"
        [list_time] => 2014-05-13 22:04:04
    )
    [2] => Array (
        [id] => 3
        [list_id] => 80
        [list_value] => List-80
        [subject] => "abc"
        [message] => "abc"
        [obj_var] => "abc"
        [url_link] => "abc"
        [list_time] => 2014-05-13 22:04:04
    )
    [3] => Array (
        [id] => 4
        [list_id] => 81
        [list_value] => List-81
        [subject] => "abc"
        [message] => "abc"
        [obj_var] => "abc"
        [url_link] => "abc"
        [list_time] => 2014-05-13 22:04:04
    )
)

数组2:

[68, 81]

我的输出应该是:

Array (     
    [0] => Array (
        [id] => 2
        [list_id] => 69
        [list_value] => List-69
        [subject] => "abc"
        [message] => "abc"
        [obj_var] => "abc"
        [url_link] => "abc"
        [list_time] => 2014-05-13 22:04:04
    )
    [1] => Array (
        [id] => 3
        [list_id] => 80
        [list_value] => List-80
        [subject] => "abc"
        [message] => "abc"
        [obj_var] => "abc"
        [url_link] => "abc"
        [list_time] => 2014-05-13 22:04:04
    )
)

所以,在正常情况下 array_diff() 可以做到这一点,但在这里它不起作用。我尝试将数字 Array2 转换为关联数组并使用 array_diff_assoc() 函数,但仍然不起作用。

我还尝试迭代我的数值数组,并检查关联 Array1 中的每个元素(即从 MySQL 获取的每个行)中的每个数字。

foreach ($list as $val) {
    while ( $r = mysqli_fetch_assoc($result)) {
        echo $val."<br/>";
        if($r['list_id'] != $val ) {
                $new[] = $r;
        }
    }       
}
print_r($new);

但是输出仅回显数值 Array1 的第一个数字 4 次(Array1 的长度),因此从关联 Array2 中仅删除一个 list_id 而不是 2:

68
68
68
68
Array (     
    [0] => Array (
        [id] => 2
        [list_id] => 69
        [list_value] => List-69
        [subject] => "abc"
        [message] => "abc"
        [obj_var] => "abc"
        [url_link] => "abc"
        [list_time] => 2014-05-13 22:04:04
    )
    [1] => Array (
        [id] => 3
        [list_id] => 80
        [list_value] => List-80
        [subject] => "abc"
        [message] => "abc"
        [obj_var] => "abc"
        [url_link] => "abc"
        [list_time] => 2014-05-13 22:04:04
    )
    [2] => Array (
        [id] => 4
        [list_id] => 81
        [list_value] => List-81
        [subject] => "abc"
        [message] => "abc"
        [obj_var] => "abc"
        [url_link] => "abc"
        [list_time] => 2014-05-13 22:04:04
    )

)

那么,我怎样才能让它发挥作用呢?最佳算法是什么?

最佳答案

您可以使用 foreach 循环和 in_array 检查来取消设置不需要的元素:

foreach ($Array1 as $key => $value)
    if(in_array($valeu['list_id'], $Array2)) unset($list[$key]);

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

相关文章:

php - 用户在 php 中的动态表单?

php - 自定义 Facebook 共享集成

java - 从java中的方法更改数组的大小

javascript - 使用 Ramda 处理 Promise 和 Wait

php - 如何检索从某个偏移量到某个限制的所有行?

php - 拖尾日志文件并将结果写入新文件

Mysql搜索每个单词

mysql - 如何在 MySQL 中使用 JOIN 编写正确的 If...Else 语句?

php - php函数中sql查询中的假值仅在引号中有效

java - 多维数组中 array.length 和 array[0].length 之间的区别?