Mailinglisten-Archive |
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