Avatar billede shaagerup Nybegynder
06. maj 2006 - 10:51 Der er 3 kommentarer og
1 løsning

Søgning i nested array

Hej,

Jeg har et array af flg. type:

$array = array("+", array("/", array("*", "9", array("^", "81", array("/", "1", array("-", "x", "2")))), "v"), array("/", "3", array("+", "x", "2")));

Skrevet overskueligt ud:
Array
(
    [0] => +
    [1] => Array
        (
            [0] => /
            [1] => Array
                (
                    [0] => *
                    [1] => 9
                    [2] => Array
                        (
                            [0] => ^
                            [1] => 81
                            [2] => Array
                                (
                                    [0] => /
                                    [1] => 1
                                    [2] => Array
                                        (
                                            [0] => -
                                            [1] => x
                                            [2] => 2
                                        )

                                )

                        )

                )

            [2] => v
        )

    [2] => Array
        (
            [0] => /
            [1] => 3
            [2] => Array
                (
                    [0] => +
                    [1] => x
                    [2] => 2
                )

        )

)

Jeg vil have mig en funktion der outputter direkte positioner til strings jeg vil søge efter. Søger jeg efter "/", ses det:

$array[1][0] => "/"
$array[1][1][2][2][0] => "/"
$array[2][0] => "/"

Og funktionen vil derfor resultere i:
$result = Array(Array(1,0), Array(1,1,2,2,0), Array(2,0));

Jeg har forsøgt mig frem med nogle for-loops i en rekursiv-funktion etc., men det er ikke lykkedes mig at få præcis det output jeg ønsker mig.

Er der nogen der kan lave en funktion som løser dette?
Avatar billede jakobdo Ekspert
06. maj 2006 - 15:31 #1
Jeg ved ikke om den er perfekt, men legede lige lidt med:

function searchArray($arr,$search)
{
    $myArr = array();
    $myTemp = array();
    foreach($arr AS $key => $value)
    {
        if(is_array($value))
        {
            $myTemp = searchArray($value,$search);
            if(count($myTemp)>0)
                $myArr[$key] = $myTemp;
        }
        else
        {
            if($value == $search)
            {
                $myArr[] = $value;
            }
        }
    }
    return $myArr;
}

$tempArray = searchArray($array,"/");

echo '<pre>';
print_r($tempArray);
echo '</pre>';
Avatar billede shaagerup Nybegynder
06. maj 2006 - 15:41 #2
Den looper fint igennem, og udelader alt andet end den string der søges under. Men: Den beholder stadig samme struktur, og laver dermed ikke det output jeg godt kunne tænke mig :

$result = Array(Array(1,0), Array(1,1,2,2,0), Array(2,0));

Dvs. et array der indeholder en række arrays, hver med en "rute" til strengen. Er et enkelt array: Array(1,0), betyder det at $array[1][0] == "/".
Avatar billede jakobdo Ekspert
06. maj 2006 - 15:44 #3
Min viden rækker ikke lige længere i dag! :o(
Avatar billede shaagerup Nybegynder
26. august 2007 - 19:57 #4
Jeg kan ikke huske hvad udfaldet blev på dette - i hvert fald er spørgsmålet uddateret, og lukkes.
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