Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Mehrdimensionales Array durchsuchen (https://www.delphipraxis.net/67363-%5Bphp%5D-mehrdimensionales-array-durchsuchen.html)

Flare 13. Apr 2006 16:39

Re: [PHP] Mehrdimensionales Array durchsuchen
 
Stimmt ^^ Fehler von meiner Seite, sorry! :oops:


Flare

Wuaegner 13. Apr 2006 16:40

Re: [PHP] Mehrdimensionales Array durchsuchen
 
:thumb: es klappt, vielen Danke.

glkgereon 13. Apr 2006 16:59

Re: [PHP] Mehrdimensionales Array durchsuchen
 
sind es immer 3 Dimensionen?

möchtest du alle ergebnisse oder nur das erste?

Code:
function searchrec($a, $keys, $v) {
  $res = array ();
  foreach ($a as $key=>$ar) {
    $tkeys = $keys;//?
    $tkeys[] = $key;
    if (is_array($ar)) {
      $res = array_merge(searchrec($ar,$tkeys,$v),$res);
    } else {
      if ($ar==$v) {
        $res[]=implode(',',$tkeys);
      }
    }
  }
  return $res;
}

function search($a, $v) {
  return searchrec($a,$k,$v);
}
das findet alles in einem array beliebiger tiefe.
eventuell noch etwas "ungeschickt" da wo das fragezeichen ist...aber es funzt :)

das ganze gibt nen array zurück der alle ids der gefundenn sachen beinhaltet...

Airblader 13. Apr 2006 18:07

Re: [PHP] Mehrdimensionales Array durchsuchen
 
Nunja, foreach() ist nett, hier aber der falsche Ansatz.
Wenn er wissen will, WO sich dieser Datensatz befindet, muss es über for() laufen ;)

Code:
function FindData($aArray, $aData)
{
    $aRes = Array();

    for($i = 0; $i <= count($aArray); $i++)
    {
        for($j = 0; $j <= count($aArray[$i]); $j++)
        {
            for($k = 0; $k <= count($aArray[$i][$j]); $k++)
            {
                if($aArray[$i][$j][$k] == $aData) { $aRes[] = strval($i).strval($j).strval($k); }   
            }           
        }
    }

    return $aRes;
}
Edit: Das läuft jetzt über 3 Ebenen. Lässt sich wie oben natürlich auch für n Ebenen umbauen :)

air

alcaeus 13. Apr 2006 18:12

Re: [PHP] Mehrdimensionales Array durchsuchen
 
Zitat:

Zitat von Airblader
Nunja, foreach() ist nett, hier aber der falsche Ansatz.
Wenn er wissen will, WO sich dieser Datensatz befindet, muss es über for() laufen ;)

Falsch! Dein Beispiel funktioniert nur, wenn das array mit integern indexiert ist. Bei so einem Array:
Code:
$foo = array(
  'foo' => 'bar',
  'bar' => 'foo'
);
Kommst du nur ueber array_keys() bzw. array_values() oder eben einer foreach-Schleife an Index und Wert ;)

Greetz
alcaeus

glkgereon 13. Apr 2006 18:19

Re: [PHP] Mehrdimensionales Array durchsuchen
 
Zitat:

Zitat von alcaeus
Zitat:

Zitat von Airblader
Nunja, foreach() ist nett, hier aber der falsche Ansatz.
Wenn er wissen will, WO sich dieser Datensatz befindet, muss es über for() laufen ;)

Falsch! Dein Beispiel funktioniert nur, wenn das array mit integern indexiert ist. Bei so einem Array:
Code:
$foo = array(
  'foo' => 'bar',
  'bar' => 'foo'
);
Kommst du nur ueber array_keys() bzw. array_values() oder eben einer foreach-Schleife an Index und Wert ;)

Greetz
alcaeus

ich habe es mit einem assoziativen getestet!!!

du kannst dich gerne selber hier überzeugen

Edit:
Nach nochmaligem lesen deines Posts fällt mir auf das du ja gesagt hast das es mit foreach GEHT. :wall: :wall: :wall:

Flare 13. Apr 2006 18:34

Re: [PHP] Mehrdimensionales Array durchsuchen
 
Zitat:

Zitat von Airblader
Nunja, foreach() ist nett, hier aber der falsche Ansatz.
Wenn er wissen will, WO sich dieser Datensatz befindet, muss es über for() laufen ;)

Eigentlich nicht, immerhin durchläuft er jedes Element 1 mal, durchgeht alle Elemente und der Unterschied zu einer For-Schleife in diesem Fall ist der, dass hier keine Angabe zu Start und Ende gemacht werden muss. In der Foreach-Schleife wird schließlich auch die Position gespeichert.

Eine weitere Möglichkeit wäre noch gewesen, das Ganze mit einer While-Schleife zu machen:
Code:
while (each($array)) {
  // Quelltext
}
Wobei mir diese Möglichkeit nicht gefällt.


Flare

Airblader 13. Apr 2006 18:47

Re: [PHP] Mehrdimensionales Array durchsuchen
 
Nun gut, aber im Eröffnungspost war von Zahlorientierten Arrays die Rede, und mit foreach() kann man nunmal nicht auslesen, im wievielten Index man sich befindet (es sei denn, man lässt nebenher auch noch eine Variable inkrementieren ;) )

air

glkgereon 13. Apr 2006 18:49

Re: [PHP] Mehrdimensionales Array durchsuchen
 
Zitat:

Zitat von Airblader
Nun gut, aber im Eröffnungspost war von Zahlorientierten Arrays die Rede, und mit foreach() kann man nunmal nicht auslesen, im wievielten Index man sich befindet (es sei denn, man lässt nebenher auch noch eine Variable inkrementieren ;) )

air

Aber sicher.
Beweis hier

geht sowohl mit assoziativen als auch mit zahlen...und ist letztendlich auch nur ein foreach-konstrukt

Edit:
:| Schon wieder Mistverstanden :wall:
Naja, tatsache ist das die Problemstellung mit foreach einwandfrei gelöst werden kann...

alcaeus 13. Apr 2006 18:53

Re: [PHP] Mehrdimensionales Array durchsuchen
 
Zitat:

Zitat von Airblader
Nun gut, aber im Eröffnungspost war von Zahlorientierten Arrays die Rede, und mit foreach() kann man nunmal nicht auslesen, im wievielten Index man sich befindet (es sei denn, man lässt nebenher auch noch eine Variable inkrementieren ;) )

Was interessiert mich der wievielte Index, wenn ich mein Array nicht mit Integern indiziere? Ausserdem haelt foreach() auch noch die Reihenfolge des Arrays ein, schliesslich gibts auch sowas:
Code:
$foobar = array(
  1 => 0,
  0 => 1
);
foreach ($foobar as $key => $value) gibt es eben in der richtigen Reihenfolge zurueck, waehrend eine for-Schleife immer nur in die Richtung arbeitest, in der du sie programmierst.

Aber so langsam werden wir OT :duck:

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz