我有一个比较难看的查询,从查询结果,然后后处理使用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;
}
你为什么不只是做一个VIEW
,轮流丑陋查询到的东西,你可以只SELECT
反对? 什么你在谈论正在物化视图,一些MySQL不处理以及其他的数据库平台。
为什么不写每个查询的结果出来到一个文本文件,然后将两个文本文件的比较diff
命令?