我需要一些帮助来解决我遇到的问题。我有一个订单系统,其中每个订单可以有乘法阶段。阶段可以更改、删除,也可以创建新阶段。
当一个阶段发生变化时,我需要输出新数据和旧数据,并将其放入邮件中,并且必须突出显示这些变化。最重要的是,阶段必须不是按id或阶段编号排序,而是在日期之后排序。这意味着一个新的阶段,例如第6阶段,如果日期是第一个即将到来的,可以放在顶部。
我的问题是我能正确地进行比较。
数据来自MySQL,之后用于PHP。我有数组中的数据(old_data,new_data),它看起来像这样:
旧数据:
Array (
[0] => Array
(
[id] => 3164
[opr_etape_id] => 307
[kg] => 35360
[stålpris] => 369512
[timer] => 300
[levuge] => 2
[etape] => 1
[ordrenr] =>
[rev] =>
)
[1] => Array
(
[id] => 3165
[opr_etape_id] => 308
[kg] => 18535
[stålpris] => 193690
[timer] => 100
[levuge] => 23
[etape] => 2
[ordrenr] =>
[rev] =>
)
[2] => Array
(
[id] => 3163
[opr_etape_id] => 3113
[kg] => 500
[stålpris] => 5000
[timer] => 0
[levuge] => 27
[etape] => 3
[ordrenr] =>
[rev] =>
)
[3] => Array
(
[id] => 3162
[opr_etape_id] => 3122
[kg] => 40
[stålpris] => 1000
[timer] => 0
[levuge] => 50
[etape] => 4
[ordrenr] =>
[rev] =>
)
)
新数据:
Array(
[0] => Array
(
[eId] => 3169
[id] => 10610
[opr_etape_id] => 307
[kg] => 35360
[stålpris] => 369512
[timer] => 300
[levuge] => 2
[etape] => 1
[ordrenr] => 49540
[rev] => 0
)
[1] => Array
(
[eId] => 3170
[id] => 10610
[opr_etape_id] => 308
[kg] => 18535
[stålpris] => 193690
[timer] => 100
[levuge] => 23
[etape] => 2
[ordrenr] => 49540
[rev] => 0
)
[2] => Array
(
[eId] => 3168
[id] => 10610
[opr_etape_id] => 3113
[kg] => 500
[stålpris] => 5000
[timer] => 0
[levuge] => 27
[etape] => 3
[ordrenr] => 49540
[rev] => 0
)
[3] => Array
(
[eId] => 3166
[id] => 10610
[opr_etape_id] => 3166
[kg] => 1000
[stålpris] => 50000
[timer] => 0
[levuge] => 41
[etape] => 5
[ordrenr] => 49540
[rev] => 0
)
[4] => Array
(
[eId] => 3167
[id] => 10610
[opr_etape_id] => 3122
[kg] => 40
[stålpris] => 1000
[timer] => 0
[levuge] => 50
[etape] => 4
[ordrenr] => 49540
[rev] => 0
)
)
我如何比较这些,以便我可以将新阶段([etape]=>5)识别为新阶段,并保持[etape]=>4 的比较
本质上我需要这个
新日期旧数据
1 1
2 2
3 3
5<=新的,突出显示这个
4 4
我需要按照新数据的顺序返回它。
您尝试使用array_diff( array $array1 , array $array2 [, array $... ] )
了吗?
现在我想到了这个。
$typer = array("kg", "stålpris", "timer", "levuge");
$nye_nøgler = array_keys($nye_værdier);
$gml_nøgler = array_keys($gml_værdier);
foreach ($nye_nøgler as $ky){
$besked .= "<tr>";
$besked .= "<td>Etape ".$nye_værdier[$ky]['etape']."</td>";
foreach ($gml_nøgler as $gy) {
for ($k = 0; $k < sizeof($typer); $k++) {
if (in_array($nye_værdier[$ky][$typer[$k]], $gml_værdier[$gy])){
$besked .= "<td align='center'>".number_format($nye_værdier[$ky][$typer[$k]], 0, ',', '.') ."</td>";
} else {
$besked .= "<td align='center'><b><font color='red'>". number_format($nye_værdier[$ky][$typer[$k]], 0, ',', '.') ."</font></b></td>";
}
}
}
$besked .= "</tr>";
}
$besked .= "</table>";
echo $besked;
它正在到达那里,但它输出数据的时间与$gml_nøgler中的数据相同。我这样做是因为我需要掌握$gml_nøgler中的数据,这样我就可以检查数据是否发生了变化。有没有更聪明的方法可以做到这一点,这样我只会把数据输出一次?
我想我自己现在已经找到了解决方案。只是看不到树林。
在新阶段上,我引用了旧阶段id。如果我用它来固定旧数据数组中的精确索引,似乎我得到了正确的输出。我只需要再测试一下,但代码如下:
$typer = array("kg", "stålpris", "timer", "levuge");
$nye_nøgler = array_keys($nye_værdier);
$gml_nøgler = array_keys($gml_værdier);
foreach ($nye_nøgler as $ky){
$message .= "<tr>";//<td>".$nye_værdier[$i][ordrenr]." R".$nye_værdier[$i][rev]."</td>";
$message .= "<td>Etape ".$nye_værdier[$ky]['etape']."</td>";
for ($k = 0; $k < sizeof($typer); $k++) {
if ($nye_værdier[$ky][$typer[$k]] == $gml_værdier[$nye_værdier[$ky]['opr_etape_id']][$typer[$k]]) {//Bruger opr_etape_id fra den nye etape til at finde den gamles værdier med
$message .= "<td align='center'>".number_format($nye_værdier[$ky][$typer[$k]], 0, ',', '.') ."</td>";
} else {
$message .= "<td align='center'><b><font color='red'>".number_format($nye_værdier[$ky][$typer[$k]], 0, ',', '.')."</font></b></td>";
}
}
$message .= "</tr>";
}
$message .= "</table>";