gpt4 book ai didi

php - 比较多维数组的差异

转载 作者:行者123 更新时间:2023-12-01 00:54:42 25 4
gpt4 key购买 nike

我有一个相当难看的查询,然后使用 php 对查询结果进行后处理,将每一行变成它自己的多维数组。

我想重构查询,但需要确保我不会以任何方式更改它返回的内容。

所以我想做的是复制原始查询并调用它,存储结果。然后使用我的新查询再次运行该函数。

遍历两个结果数组并比较它们是否存在任何差异(键、值、缺失条目、类型差异等)。

最简单的方法是什么?

基本上我知道如何调用这两个查询等,

我想我真正的问题是,最后一旦我得到两个结果数组,我该如何检查和比较它们。

我希望最终得到的是一个并排的“print_r”类型输出,带有一条红线或类似的横线,突出显示任何差异。

最佳答案

首先,你可以使用array_uintersect_assoc()像这样。

// First get intersecting values
$intersect = array_uintersect_assoc($expected, $results, "checkStructure");
print_r($intersect);

//Then print results that are in intersecting set (e.g. structure of $expected, value of $results
print_r(array_uintersect_assoc($results, $intersect, "checkStructure"));

function checkStructure($x, $y) {
if (!is_array($x) && !is_array($y)) {
return 0;
}
if (is_array($x) && is_array($y)) {
if (count($x) == count($y)) {
foreach ($x as $key => $value) {
if(array_key_exists($key,$y)) {
$x = checkStructure($value, $y[$key]);
if ($x != 0) return -1;
} else {
return -1;
}
}
}
} else {
return -1;
}
return 0;
}

如果还是不行,求助array_diff()array_diff_assoc() .或者尝试以下代码。

function multidimensional_array_diff($a1,$a2) 
{
$r = array();
foreach ($a2 as $key => $second)
{
foreach ($a1 as $key => $first)
{
if (isset($a2[$key]))
{
foreach ($first as $first_value)
{
foreach ($second as $second_value)
{
if ($first_value == $second_value)
{
$true = true;
break;
}
}
if (!isset($true))
{
$r[$key][] = $first_value;
}
unset($true);
}
}
else
{
$r[$key] = $first;
}
}
}
return $r;
}

关于php - 比较多维数组的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12169821/

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