[php] Zoek functie voor zoeken naar keys in array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • emkedouwe
  • Registratie: September 2001
  • Laatst online: 26-11-2021
Hoi,

Ik heb de volgende array:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array
(
    [1] => 
    [24] => Array
        (
            [25] => Array
                (
                    [26] => Array
                        (
                            [27] => 
                        )

                )

        )

)

De array moet oneindig groot kunnen zijn.

Nu heb ik een zoekfunctie gemaakt die moet kijken of een key voorkomt in de array. Dit is de functie
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function isidin($search_str, $multi_array)
{
    //zoek in array naar key
    if(!is_array($multi_array))
    {
        return 0;
    }
    foreach($multi_array as $key => $value)
    {
        if($key == $search_str)
        {
            return 1;
        }
        else if($value)
        {
            isidin($search_str, $value);
        }
        else
        {
            return 0;
        }
    }
}


Dus als deze als value een array tegenkomt gaat hij daar weer in verder zoeken. Dit werkt tot een aantal niveau's, maar na key 25 kan hij niets meer vinden.

Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij, moet else if (regel 14) aan elkaar, dus elseif.

edit:
|:( ik lees net dat dat niets uitmaakt. Negeer mij.

[ Voor 35% gewijzigd door Verwijderd op 09-11-2004 14:16 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Else if is gewoon goed. Je probleem is echter dat je helemaal niks doet met het resultaat van je recursieve aanroep. Verder ga je er vanuit dat je al in de eerste pass een resultaat moet hebben.

Probeer de return er buiten te halen en binnen je foreach te werken met een boolean waarin je aangeeft of de waarde al gevonden is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

elseif moet idd aan elkaar afaik
, en kende je deze al?
Array_search

[ Voor 8% gewijzigd door Verwijderd op 09-11-2004 14:16 ]


Acties:
  • 0 Henk 'm!

  • emkedouwe
  • Registratie: September 2001
  • Laatst online: 26-11-2021
Whoei super simpel gewoon ff isidin returnen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function isidin($search_str, $multi_array)
{
    //zoek in array naar key
    if(!is_array($multi_array))
    {
        return 0;
    }
    foreach($multi_array as $key => $value)
    {
        if($key == $search_str)
        {
            return 1;
        }
        elseif($value)
        {
            return isidin($search_str, $value);
        }
        else
        {
            return 0;
        }
    }
}

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Je functie werkt nog niet. Bij het doorlopen van de foreach lus wordt er altijd wat gereturned. De foreach lus zal dus nooit meer dan 1 keer doorlopen worden. Je kunt pas 0 terug geven waneer je helemaal zeker weet dat er niks gevonden is en dat je alles hebt gehad. Waneer je in bovenstaande array los zou laten en zou zoeken naar 25 zal hij deze niet vinden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Zo werkt ie prima.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function isidin($search_str, $multi_array) {

  if(is_array($multi_array)) {

    foreach ($multi_array as $key => $value) {

      if ($key == $search_str) {

        return 1;

      }

      else {

        $children = isidin($search_str, $value);

        if ($children == 1) {

          return 1;

        }

        else {

          continue;

        }

      }

    }

  }

  return 0;

}
]

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
2
else {
  continue;

Beetje zinloos aan het eind van de lus, niet? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1