За последние 24 часа нас посетили 16296 программистов и 1673 робота. Сейчас ищут 1458 программистов ...

Значение элемента многомерного массива по списку ключей

Тема в разделе "PHP для новичков", создана пользователем ShamahN, 23 сен 2010.

  1. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Кажется где-то видел, но не помню где.
    Опишу немного. Есть многомерный массив с сообщениями для пользователей. Надо нарисовать функцию, которая по набору ключей будет выдергивать новую фразу. Все бы ничего, но вложенность может быть произвольной. Например
    PHP:
    1. <?php
    2. $messages['global']['error'] = "uncatcheble error";
    3. $messages['blog']['redirect']['info'] = "comment succ posted";
    вот, и надо чтобы чем-нить типа такого getMessage("/global/error"); можно было бы выдернуть сообщение.
    Свой велосипед я навоял, но помнится мне что что-то стандартное есть. Или я с xPath`ом путаю
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    PHP:
    1. function array_get_value($array, $path){
    2.   $args = explode('/', (trim($path, '/')));
    3.   $return = $array;
    4.   foreach($args as $arg){
    5.     if(!is_array($return) || !isset($return[$arg])){
    6.       return null;
    7.     } else {
    8.       $return = $return[$arg];
    9.     }
    10.   }
    11.   return $return;
    12. }
    наверно что-то типа такого. Если такого значения не существует, то возвращается нулл.
     
  3. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Gromo
    спс) что-то подобное у меня и есть) я думал может упустил что-то встроенное
     
  4. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    ShamahN
    специально для тебя писал ;)

    на самом деле в одной из тем поднимали уже этот вопрос.
    была реализация через рекурсию, но, ИМХО, это хрень, когда можно решить простым циклом.

    при больших массивах хотел посоветовать делать ссылками, но затем наткнулся на статью (из кэша гугла):
    http://webcache.googleusercontent.com/s ... clnk&gl=ru

    оригинал (у меня недоступен почему-то):
    http://habrahabr.ru/blogs/php/43489/
     
  5. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Gromo
    Спасибо за глубокий экскурс =) прислушаюсь. Массивы не будут сильно большими. Пару метров максимум. Максимальная глубина - 5