gpt4 book ai didi

php - 逐个键查找两行数据之间的差异

转载 作者:行者123 更新时间:2023-11-29 10:26:05 26 4
gpt4 key购买 nike

我有两行数据 - 始终只有两行,但最多可能有四十列左右。列名称因具体情况而异,但以下是一个代表性示例:

id | height | width | colour | in_stock | featured | on_sale
------------------------------------------------------------
1 | 30 | 20 | black | yes | no | yes
2 | 30 | 25 | red | yes | yes | no

我想将这两行之间的所有差异放入一个数组中,以便我可以记录从第 1 行到第 2 行的更改。

我认为 array_diff() 可以完成这项工作!

所以我高兴地把 array_diff() 扔给它:

//Simplified queries for the example

$sql1 = "SELECT * FROM table WHERE id = 1";
$rs1 = $conn->Execute($sql1);
$rs1 = $rs1->fields;

$sql2 = "SELECT * FROM table WHERE id = 2";
$rs2 = $conn->Execute($sql2);
$rs2 = $rs2->fields;

//Build first array
foreach($rs1 as $key => $value){
$data1[$key] = $value;
}

//Build second array
foreach($rs2 as $key => $value){
$data2[$key] = $value;
}

//Find the differences
$theDifferences = array_diff($data1, $data2);

//Loop through the differences logging the changes
foreach($theDifferences as $field => $value){
echo "Change found for ".$field."!";
}

为什么这不起作用。

这“看起来”正在发挥作用。由于许多列包含长字符串、颜色名称、日期等,因此当其中一个发生更改时,它会被适本地插入差异数组中。问题是(当然)多个"is"或“否”列的行为并不符合我的预期。因此,对于表示例,上述代码的结果是:

colour, width 

它不会“看到”featured 或 on_sale 列发生更改,因为 data1 数组和 data2 数组都包含 no 和 yes。

我想我需要逐个键进行比较?与 array_diff_key() 相反的东西?但我被困在这里了。

我还考虑过是否可以仅使用 SQL 查询来完成此操作,我认为这会更有效,但这远远超出了我的 SQL 能力。

提前致谢。

最佳答案

我想你已经快到了。在您的查询之后可能会出现这样的情况:

$theDifferences = array();
foreach($rs1 as $key => $value){
if ($rs2[$key] != $value){
$theDifferences[$key] = $value;
}
}

对于 SQL,您可以使用 EXCEPT 来获取两个查询之间不同的行列表,但您仍然必须循环遍历键并查找空值 - 这并不能为您节省很多.

关于php - 逐个键查找两行数据之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48280199/

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