Avatar billede jakobdo Ekspert
21. april 2007 - 22:08 Der er 7 kommentarer og
1 løsning

Hvordan sammenligner jeg 2 mixede arrays

Jeg har 2 arrays, f.eks.:

$arr1 = array('k','a','m','e','r','a');
$arr2 = array('m','a','k','k','e','r');

Ved en array_diff($arr1,$arr2) vil den returnere et tomt array.

Men hvordan tester jeg om det er præcist de samme antal værdier?

Jeg har forsøgt med følgende kode, som faktisk virker:

function myArrayDiff($arr1,$arr2)
{
    $countValues1 = array_count_values($arr1);
    ksort($countValues1);
    $countValues2 = array_count_values($arr2);
    ksort($countValues2);
    if(count($countValues1) == count($countValues2))
    {
        foreach($countValues1 AS $letter => $count)
        {
            if(array_key_exists($letter, $countValues2))
            {
                if($count != $countValues2[$letter])
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        return true;
    }
    else
    {
        return false;
    }
}

Men jeg vil dog mene der burde være en array-funktion, som kunne bruges, eller måske en funktion der kan bruges med en user-defined funktion, anyone?
Avatar billede erikjacobsen Ekspert
21. april 2007 - 22:58 #1
Du kunne vel lave en array_diff($arr1,$arr2) og en array_diff($arr2,$arr1)
Avatar billede erikjacobsen Ekspert
21. april 2007 - 22:59 #2
Men så er der jo http://php.net/array_intersect
Avatar billede jakobdo Ekspert
21. april 2007 - 23:09 #3
Jeg har også tænkt ideen med array_diff() begge veje!
men den vil jo stadig melde tomt tilbage på f.eks.
kamera vs makker og vice versa!
Avatar billede erikjacobsen Ekspert
21. april 2007 - 23:14 #4
Ok, vi skal have samme antal bogstaver, men i vilkårlig rækkefølge. Så skal der tælles. Noget i retning af:

$arr1 = array('k','a','m','e','r','a','k');
$arr2 = array('m','a','k','k','e','r');

$c1=array_count_values($arr1);
$c2=array_count_values($arr2);

$ok=(count($c1)==count($c2));
foreach ($c1 as $key=>$value) {
    if ($c2[$key]!=$value) $ok=false;
}
if ($ok) { print "De er ret ens<br>";
} else { print "Forskel<br>";}
Avatar billede jakobdo Ekspert
22. april 2007 - 11:46 #5
Bør du ikke lave ligesom jeg gør i min version, hvor du tester om key_exist?
Men ellers minder de vel meget om hinanden!
Avatar billede erikjacobsen Ekspert
22. april 2007 - 11:54 #6
Det skulle ikke være nødvendigt, en "ingenting" sammenlignet med et ikke-nul tal giver falsk. Ja, de ligner meget - jeg forsøgte lidt forskelligt, men endte på ca. det samme. Det eneste jeg ikke nåede at kigge på, var om $c1 og $c2 kunne sammenlignes med en passende funktion - 2 gange array_diff måske.
Avatar billede jakobdo Ekspert
22. april 2007 - 12:38 #7
2 gange array_diff() vil vel give som jeg skriver i: 21/04-2007 23:09:27
Men måske man kunne gøre det på array_count_keys() eller noget!
Avatar billede jakobdo Ekspert
29. april 2007 - 19:01 #8
erik, jeg antager du ikke vil have point, hvis jeg husker rigtigt?
Jeg lukker ihf. dette spørgsmål, da jeg må "nøjes" med den løsning jeg allerede kom op med.
Erik: Jeg takker for hjælpen.
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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