ФорумПрограммированиеПыхнуть хотите?Готовые решения → 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, верно подмечено
    Сапожник без сапог

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