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

Aliased array

  • artoodetoo

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

    Spritz 8 мая 2010 г. 1: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

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

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

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

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

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

    фор экзампл:

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

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



    <div id=&quot;right&quot; class=&quot;sidebar&quot;>
    {for $b in $sidebar[&#39;right&#39;]}
    {$b}
    {/for}
    </div>


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

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

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

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

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

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

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

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

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

    Spritz 10 мая 2010 г. 23:55, спустя 2 дня 20 часов 57 минут

    Еще одно применение - &quot;усиление&quot; parse_ini_file()
    PHP читает ini-файлы как простой ассоциативный массив, если второй параметр не указан, или добавляет уровень вложенности &quot;секция&quot;, если второй параметр 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 &#39;aliasarray.php&#39;;
    $config = new AliasArray();

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

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


    результат

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

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

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

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

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

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

    Spritz 4 апреля 2011 г. 2:49, спустя 17 минут 22 секунды


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

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

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

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

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

    в dudecms lite =)

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

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

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

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

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

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

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

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