gpt4 book ai didi

php - 合并和区分数组数组以找到共同的值

转载 作者:可可西里 更新时间:2023-11-01 12:34:01 24 4
gpt4 key购买 nike

我正在尝试遍历多个数据库表结构并确定通用结构(即哪些列相同)。最终结构应该只显示公共(public)列,所以如果任何表有一个唯一列,它不应该在最终数组中。

这是三个表结构的示例。

$arr1 = [
["name"=>"col1", "type"=>"varchar"],
["name"=>"col2", "type"=>"int"]
];
$arr2 = [
["name"=>"col1", "type"=>"varchar"],
["name"=>"col2", "type"=>"int"] ,
["name"=>"col3", "type"=>"date"]
];
$arr3 = [
["name"=>"col1", "type"=>"varchar"],
["name"=>"col3", "type"=>"int"]
];

$arrays = [$arr1, $arr2, $arr3];

使用 array_mergearray_diffarray_intersect 或循环,是否可以确定这些列中的哪些列对所有表都是通用的?

最终值应该是[["name"=>"col1", "type"=>"varchar"]]

最佳答案

你可以使用 array_uintersect ,它与您自己的功能相交。但是你应该记住,比较函数不会简单地返回 true 或 false - 你必须返回 -1。 , 01 .

在 PHP7 中,您可以使用飞船运算符 <=>进行比较。

$intersection = array_uintersect($arr1, $arr2, $arr3, function($a, $b) {
$ret = $a['name'] <=> $b['name'];
return $ret ? $ret : $a['type'] <=> $b['type'];
});
print_r($intersection);

如果你想把所有数组放在交集内,你可以这样做:

$arrays = [$arr1, $arr2, $arr3];
$arrays[] = function($a, $b) {
$ret = $a['name'] <=> $b['name'];
return $ret ? $ret : $a['type'] <=> $b['type'];
};

$intersection = array_uintersect(...$arrays);

在旧版本中,您应该改用 strcasecmp .

关于php - 合并和区分数组数组以找到共同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51157176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com