Avatar billede lsskaarup Nybegynder
04. september 2014 - 09:29 Der er 1 kommentar og
1 løsning

Sammenligne 2 arrays og udskriv alt fra array1 men fremhæv forskelle

Jeg skal bruge lidt hjælp til at sammenligne 2 arrays. Det specielle er at jeg skal have al data fra array1 ud, men der hvor der er forskelle fra array1 til array2, skal værdien fremhæves.

Outputtet skal bruges i en mail, som skal sendes til bestemt brugere.

For lige at forklarer baggrunden, så kan vi have en sag, som kan bestå af flere etaper, i teorien uendeligt. Disse etaper bliver jævnligt ændret, og når det sker skal jeg sende en mail, hvori modtager kan se de gamle værdier, de nye værdier OG ændringerne i de nye værdier skal fremhæves.

Jeg er kommet lidt af vejen, men er faret lidt vild på den sidste del... ;-)

Jeg har følgende kode pt.:
$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 ($nye_værdier[$ky][$typer[$k]] == $gml_værdier[$ky][$typer[$k]]) {
                    $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>";

Men fordi jeg laver en foreach på begge arrays, så får jeg udskrevet mange dubletter. Men jeg skal jo bruge værdien i begge arrays, for at kunne sammenligne om den er ændret.

Er der nogle som har et god indspark til hvordan jeg kringler den?
Avatar billede lsskaarup Nybegynder
04. september 2014 - 11:14 #1
Ah, fandt vist svaret selv.

Jeg har jo en reference på den nyeste etape, som peger på dens forrige etape. Bruger jeg den reference, ser det ud til at jeg får det output som jeg skal bruge

$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>";
Avatar billede lsskaarup Nybegynder
19. oktober 2014 - 13:46 #2
Nå, ingen hjælp
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester