[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Перевод строки в индексы массива
AllesKlar
Чейта туплю.
на входе имеем строку 'key1.key2.key3....keyN'
На выходе должны пролучить массив $array['key1']['key2']['key3']...['keyN']
Запилил рекурсией. Может есть проще?

    function key_merge($str_keys)
{
$array = array();
$keys = explode('.', $str_keys);
if( count($keys) == 1 )
{
$array[$keys[0]] = '';
return $array;
}
else
{
$tmp_keys = str_replace($keys[0] . '.', '', $str_keys);
$array[$keys[0]] = key_merge($tmp_keys);
}

return $array;
}

$str = 'key1.key2.key3.key4';
$array = key_merge($str);
debug($array);

Array
(
[key1] => Array
(
[key2] => Array
(
[key3] => Array
(
[key4] => ''
)
)
)
)


_____________
[продано копирайтерам]
kaww
Цитата (AllesKlar @ 14.12.2014 - 14:40)
Может есть проще?

Вот мой вариант.
$str = 'key1.key2.key3.key4';
$arr = explode('.', $str);
$result = array();
$l = &$result;
while (($key = array_shift($arr))) {

$l[$key] = array();
$l = & $l[$key];
}
$l = '';
unset($l);
var_dump($result);
AllesKlar
О, класс. А то меня напрягает лишняя функция smile.gif
Понаделают кривых баз с составными значениями, потом мучайся. smile.gif

_____________
[продано копирайтерам]
Alchemist
Тогда уж так:
$str = 'key1.key2.key3.key4';
$arr = explode('.', $str);
$result = ''; // тут может быть что угодно, оно окажется внутри массива

while ($key = array_pop($arr))
$result = array($key => $result);

print_r($result);
AllesKlar
Alchemist
красиво

_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.