比较2阵列和高亮区别

时间:2014-09-02 11:49:31

标签: php mysql arrays

我需要一些帮助来解决我遇到的问题。我有一个订单系统,每个订单可以有多个阶段。这些阶段可以改变,删除,并可以进行新的阶段。

当一个阶段被更改时,我需要输出新数据和旧数据并放入邮件,并且必须突出显示更改。最重要的是,阶段必须不是按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< = new,突出显示

4 4

我需要按照新数据的顺序返回它。

3 个答案:

答案 0 :(得分:0)

您是否尝试使用array_diff( array $array1 , array $array2 [, array $... ] )

答案 1 :(得分:0)

现在我想出了这个。

$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中的数据,所以我可以检查数据是否已经改变。有没有更聪明的方法来做到这一点,所以我只能获取一次数据?

答案 2 :(得分:0)

我想我现在已经找到了解决方案。只是没有看到伍德的树木。

在新阶段,我有一个旧阶段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>";