array_keys ti restituisce un array con le chiavi, quindi basta che poi ti metti a ciclare su quell'array per andare avanti nel parsare l'array...

ti posto un esempio di quello che faccio io:

Codice PHP:
$rooms array_keys($data["planning"]);
            for (
$j 0$j count($rooms); $j++)
            {
                
$this->room $rooms[$j];
                for (
$i 1$i <= count($data["period"]); $i++)
                {
                    
$start mktime(0,0,0,(int)$data["period"][$i]["from"]["month"],(int)$data["period"][$i]["from"]["day"],(int)$data["period"][$i]["from"]["year"]);
                    
$end mktime(0,0,0,(int)$data["period"][$i]["to"]["month"],(int)$data["period"][$i]["to"]["day"],(int)$data["period"][$i]["to"]["year"]);
                    
$today mktime(0,0,0,(int)date("n"),(int)date("j"),(int)date("Y"));
                    if ((
$start != -&& $end != -1) && ($start <= $end) && ($start >= $today) && ($end >= $today))
                    {
                        
$days $end $start;
                        
$days $this->seconds_to_days($days);
                        for (
$n 0$n <= $days$n++)
                        {
                            
$week_day $this->week_day($start $this->day_to_seconds($n));
                            
$date $this->timestamp_to_date($start $this->day_to_seconds($n));
                            
$rates array_keys($data["planning"][$rooms[$j]][$week_day]);
                            for (
$k 0$k count($rates); $k++)
                            {    
                                if (isset(
$data["planning"][$rooms[$j]][$week_day][$rates[$k]]["allocated"]))
                                    
$allocated $data["planning"][$rooms[$j]][$week_day][$rates[$k]]["allocated"];
                                if (
$rates[$k] == 0)
                                    @
$this->create_row($date,$rates[$k],$allocated);
                                else
                                {
                                    if (isset(
$data["planning"][$rooms[$j]][$week_day][$rates[$k]]["price"]))
                                        
$price $data["planning"][$rooms[$j]][$week_day][$rates[$k]]["price"];
                                    if (isset(
$data["planning"][$rooms[$j]][$week_day][$rates[$k]]["single"]))
                                        
$single $data["planning"][$rooms[$j]][$week_day][$rates[$k]]["single"];
                                    if (isset(
$data["planning"][$rooms[$j]][$week_day][$rates[$k]]["double"]))
                                        
$double $data["planning"][$rooms[$j]][$week_day][$rates[$k]]["double"];
                                    if (isset(
$data["planning"][$rooms[$j]][$week_day][$rates[$k]]["triple"]))
                                        
$triple $data["planning"][$rooms[$j]][$week_day][$rates[$k]]["triple"];
                                    if (isset(
$data["planning"][$rooms[$j]][$week_day][$rates[$k]]["minstay"]))
                                        
$minstay $data["planning"][$rooms[$j]][$week_day][$rates[$k]]["minstay"];
                                    if (isset(
$data["planning"][$rooms[$j]][$week_day][$rates[$k]]["maxstay"]))
                                        
$maxstay $data["planning"][$rooms[$j]][$week_day][$rates[$k]]["maxstay"];
                                    if (isset(
$data["planning"][$rooms[$j]][$week_day][$rates[$k]]["cancellation"]))
                                        
$cancellation $data["planning"][$rooms[$j]][$week_day][$rates[$k]]["cancellation"];
                                    @
$this->create_row($date,$rates[$k],$allocated,$price,$single,$double,$triple,$minstay,$maxstay,$cancellation);
                                }
                            }
                        }
                    }
                }
            }