2014-01-27 5 views
1

У меня есть многомерный массив, вот небольшой отрывок:Строка для многомерного пути массива

Array (
    [Albums] => Array (
     [A Great Big World - Is There Anybody Out There] => Array(...), 
     [ATB - Contact] => Array(...), 
    ) 
    [Pop] => Array (...) 
) 

И у меня есть динамический путь:

/albums/a_great_big_world_-_is_there_anybody_out_there 

Что бы быть лучшим способом, чтобы получить значение (в этом примере) $arr["albums"]["A Great Big World - Is There Anybody Out There"]?

Обратите внимание: динамика должна быть динамической, поскольку в этом примере вложенность может быть более глубокой, чем 2 уровня.

EDIT

Вот функция я использую, чтобы создать простую строку для URL:

function formatURL($url) { 
    return preg_replace('/__+/', '_', preg_replace('/[^a-z0-9_\s-]/', "", strtolower(str_replace(" ", "_", $url)))); 
} 

ответ

0
$array = array(...); 
$path = '/albums/a_great_big_world_-_is_there_anybody_out_there'; 

$value = $array; 
foreach (explode('/', trim($path, '/')) as $key) { 
    if (isset($value[$key]) && is_array($value[$key])) { 
     $value = $value[$key]; 
    } else { 
     throw new Exception("Path $path is invalid"); 
    } 
} 

echo $value; 
+0

Этот цикл работ, но ребенок в моем массиве не называется '/альбомы/a_great_big_world _-_ is_there_anybody_out_there', это '/ Альбомы/Большой большой мир - есть кто-нибудь там». Любой способ легко исправить это, или я лучше переписываю массив? –

+1

Ухм, да, нет очевидного способа преобразования нижней подчеркнутой строки в обведенную строку. Если у вас есть * очевидный путь, пойдите для этого. Или, если у вас есть генератор, который превращает обведенную строку с разнесенной строкой в ​​нижнюю строчную подчеркнутую строку, используйте ее наоборот. Но придерживаться идентичных, уникальных идентификаторов всегда лучше, чем пытаться совместить две вещи, которые не совпадают. Перепишите свой массив. – deceze

+0

Да, я думаю, что я буду использовать функцию 'formatURL' в моем основном сообщении наоборот. Спасибо за помощь! –

Смежные вопросы