phpbar.de logo

Mailinglisten-Archive

[php] variable Variablennamen bei Arrays

[php] variable Variablennamen bei Arrays

Jens Giessmann jg at handcode.de
Fre Nov 12 12:21:10 CET 2004


Hi,

On Fri, Nov 12, 2004 at 11:16:52AM +0100, Martin Rozmus wrote:
> 
> Ich habe leider keine Zeit, mich damit näher zu beschäftigen. Aber es
> sieht danach aus, als ob eine rekursive Funktion in Verbindung mit der
> Funktion array_map, bzw. array_walk zur Lösung deines Problemes führen
> würde.

Wie gesagt, eine rekursive Funktion verwende ich, um in dem Array nach
dem zu bearbeitenden Schluessel zu suchen, und lasse mir von dieser
die Keys dorthin zurueckgeben (so entsteht das Array $keys aus dem
Ursprungs Beispiel).

Ich hatte im ersten Schritt direkt bei bei der "Suche" die Daten
veraendert.  Da ich die Suche aber von der Bearbeitung der Daten
trennen wollte, kam das Problem: wie finde ich anhand der keys als
"Brot-Krumen" wieder den Wert im Datenarray. Das ist jetzt ja aber
auch geloest ist.

Falls es wen interessiert, hier ist die Funktion die in einem
verschachtelten Array einen Key sucht und $keys zurueckgibt (der
gesuchte Key muss eindeutig sein!)

--------------------------------schnipp-----------------------------
 // Sucht nach einem eindeutigen Schluessel in einem
 // Multidimensioanlen Array beliebiger Tife und gibt im Erfolgsfall
 // alle Keys im Baum zum Suchergebnis zurueck. Optional kann der
 // Parameter $subkey gesetzt werden, wenn ein Element die weiteren
 // Values in einem bestimmten SubArray haelt. z.B. waere hier
 // $subkey='data'
 //
 // [1099488687.3379] => Array
 //   (
 //    [name] => php
 //    [data] => Array
 //    (
 //            [1099488687.3359] => Array
 //        (
 //                    [name] => php.net
 //                    [data] => http://www.php.net
 //                )
 //
 //            [1099488726.7514] => Array
 //        (
 //                    [name] => php-bar
 //                    [data] => http://www.phpbar.de
 //                )
 //
 //        )

 function multi_array_key_search($needle, $haystack, $subkey=FALSE) {

   if (is_array($haystack)) {

     foreach ($haystack as $key => $values) {

       if ($key == $needle) {

         $return[] = $key;
         return $return;

       }
       else {

         if ($subkey) {

           $next = $values[$subkey];

         }
         else {
           $next = $values;
         }

         if (is_array($next)) {

           $found = $this->multi_array_key_search($needle, $next,
                                                  $subkey);


           if ($found) {

             if (is_array($found)) {

               array_unshift($found, $key);
               return $found;

             }

           }

         }

       }

     } // End foreach


   }
   else {

     return FALSE;

   }

 } // End function multi_array_key_search

--------------------------------schnapp-----------------------------




-- 

Gruss Jens

php::bar PHP Wiki   -   Listenarchive