Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Создание многомерного динамического массива


Автор: K0T9I 5.4.2011, 01:02
Код

$path = "/root/user/login/";
set_value($path,'blabla');
get_value($path);
clear_value($path);
delete_key($path);

функцией set_value необходимо получить массив вида:
Код

[root] => Array
        (
            [user] => Array
                (
                    [login] => blabla
                )

        )

get_value, clear_value, delete_key - получает значение, очищает значение, удаляет ключ соответственно.
сейчас все эти функции у меня работают через eval();
возможно сделать как-то по другому? не хочется использовать eval.

Автор: KLeonid 5.4.2011, 01:24
А можно по русски? smile.
Причем тут эвал, не понятно. А тем более причем тут получение чего либо в сеттере? smile 
Код, пожалуйста smile .

Автор: K0T9I 5.4.2011, 01:48
Код

function path_to_array($path)
{
    $path_array = explode('/',$path);
    $result = '';
    foreach ($path_array as $value){
        if (empty($value)){
            continue;
        }
        $result .= "['{$value}']";
    }
    return '$buffer_array'.$result;
}

function set_value(&$array,$path,$value)
{
    $result = path_to_array($path);
    $eval = "{$result}='{$value}';";
    $buffer_array = $array;
    eval($eval);
    $array = $buffer_array;
}

function get_value($array,$path)
{
    $eval = path_to_array($path);
    $eval = "return {$eval};";
    $buffer_array = $array;
    return eval($eval);
}

set_value($array,'/root/user1/login','blabla');
set_value($array,'/root/user2/login','lalala');
echo '<pre>';
print_r($array);
echo '</pre>';
echo (get_value($array,'/root/user1/login'));


пример выводит
Код

Array
(
    [root] => Array
        (
            [user1] => Array
                (
                    [login] => blabla
                )

            [user2] => Array
                (
                    [login] => lalala
                )

        )

)
blabla

Автор: ksnk 5.4.2011, 02:23
php уже достаточно развит, чтобы в нем можно было использовать классы.
Код

class store {

    private $array;

    private function &path_to_array($path)
    {
        $path_array = explode('/',$path);
        $result = &$this->array;
        foreach ($path_array as $value){
            if(!empty($value)){
                if(!is_array($result)) {
                    $result[$value]=array();
                }
                $result=&$result[$value];
            }
        }
        return $result;
    }

    function get(){
        return $this->array;
    }

    function set_value($path,$value)
    {
        $result = &$this->path_to_array($path);
        $result=$value;
    }

    function get_value($path)
    {
        return $this->path_to_array($path);
    }
}

$store=new store();
$store->set_value('/root/user/login','blabla');
echo $store->get_value('/root/user/login');
echo '<pre>';
print_r($store->get());
echo '</pre>';


и никаких eval'ов.

K0T9I, а можно полюбопытствовать, какие языки изучались до php?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)