ФорумПрограммированиеПыхнуть хотите?Готовые решения → Aliased array

Aliased array

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Май 8, 2010, 9:57 д.п.

    Обойдусь без предисловий. Код:

    $x = new AliasArray();

    $x->set('z', '@');
    $x->set('alpha.beta.omega', 'a');
    $x->set('alpha.*', 'b');
    $x->set('alpha.*.theta', 'c');
    $x->set('alpha.*', 'd');
    $x->set('alpha.*.gama', 'e');

    header('Content-type: text/plain');
    echo 'alpha: ' . var_export($x->get('alpha'), TRUE) . "\n";
    echo 'all array as flat: ' . var_export($x->getFlat(), TRUE) . "\n";


    Результат:

    alpha: array (
    'beta' =>
    array (
    'omega' => 'a',
    ),
    0 => 'b',
    1 =>
    array (
    'theta' => 'c',
    ),
    2 => 'd',
    3 =>
    array (
    'gama' => 'e',
    ),
    )
    all array as flat: array (
    0 => '@',
    1 => 'a',
    2 => 'b',
    3 => 'c',
    4 => 'd',
    5 => 'e',
    )

    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Май 8, 2010, 10:14 д.п., спустя 17 минут 24 секунды

    artoodetoo, нах?)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Май 8, 2010, 10:28 д.п., спустя 14 минут 4 секунды

    фор экзампл:

    {block 'sidebar.right.*'}
    djshkdjshds
    sddsljdslkjds
    sddskjdsl
    {/block}

    {block 'sidebar.left.*'}
    ksa kas sakjashk
    ask sakasjkasjlksa
    askaskla
    {/block}



    <div id="right" class="sidebar">
    {for $b in $sidebar['right']}
    {$b}
    {/for}
    </div>


    алсо:
    чтобы адресовать какие-то параметры произвольной вложенности и давать при этом доступ только на get
    Спустя 106 сек.
    а getFlat() мне неоднократно хотелось, чтобы воспользоваться простым и понятным foreach
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Май 8, 2010, 10:58 д.п., спустя 29 минут 42 секунды

    стандартно деревья на уровне скрипта реализуются в виде многомерного массива.

    getFlat() получает список всех "листьев" выбранного поддерева.

    замена ветки/листочка будет выглядеть как
    $x->set('трам.бала.бам', $node)

    а добавление ветки/листочка будет выглядеть как
    $x->set('трам.бала.*', $node)

    вобщем это напоминает упрощенный xpath
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Май 11, 2010, 7:55 д.п., спустя 2 дня 20 часов 57 минут

    Еще одно применение - "усиление" parse_ini_file()
    PHP читает ini-файлы как простой ассоциативный массив, если второй параметр не указан, или добавляет уровень вложенности "секция", если второй параметр TRUE.

    А как быть если требуется бОльшая вложенность?

    test.ini

    [section1]
    a=1
    b=2
    [section2]
    a=3
    b=4
    [section3.subA]
    a=5
    b=6
    [section3.subB]
    a=7
    b=8


    testini.php

    <?php

    require 'aliasarray.php';
    $config = new AliasArray();

    $tmp = parse_ini_file('test.ini', TRUE);
    foreach (array_keys($tmp) as $section) {
    $config->set($section, $tmp[$section]);
    }

    header('Content-type: text/plain');
    var_export($config->get());


    результат

    array (
     'section1' =>
     array (
       'a' => '1',
       'b' => '2',
     ),
     'section2' =>
     array (
       'a' => '3',
       'b' => '4',
     ),
     'section3' =>
     array (
       'subA' =>
       array (
         'a' => '5',
         'b' => '6',
       ),
       'subB' =>
       array (
         'a' => '7',
         'b' => '8',
       ),
     ),
    )

    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Апрель 4, 2011, 10:32 д.п., спустя 328 дней 2 часа 36 минут

    Я бы прошел тест :)
    http://habrahabr.ru/blogs/php/116686/#habracut
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Апрель 4, 2011, 10:49 д.п., спустя 17 минут 22 секунды


    Я бы прошел тест :)
    http://habrahabr.ru/blogs/php/116686/#habracut
    задачка для 5 минут работы … хуй в общем. я еще понимаю была бы задачка "и сохранить", вот тут уже инетерснее в разы ;)

    у меня был свой ConfigINiAdapter который умел читать/сохранять такой файл =)

    в dudecms lite =)
    Сапожник без сапог
  • wats

    Сообщения: 134 Репутация: N Группа: Кто попало

    Spritz Апрель 8, 2011, 2:14 п.п., спустя 4 дня 3 часа 25 минут

    в dudecms lite =)

    а где можно это скачать?
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Апрель 8, 2011, 5:32 п.п., спустя 3 часа 18 минут 16 секунд

    wats, плохой вопрос. dudecms lite пишут с нуля за 5 минут. не смысла его хранить
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Апрель 8, 2011, 6:49 п.п., спустя 1 час 16 минут 56 секунд

    artoodetoo, верно подмечено
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!