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


Автор: MeIsGremlin 17.3.2008, 15:40
Есть вот такой вот массив объектов в сессии. Как мне к примеру получить или изменить значение K_ANY_1 в simpleobjectelement ? 

это меняет лишь в объекте а как сделать такое же в сессии?
Код

foreach ($_SESSION['acl']['object'] as $id => $obj)
{
     $obj -> setName($name)
}


Array
(
    [0] => simpleobjectelement Object
        (
            [m_name] => K_ANY_1
            [m_pmod] => 
            [m_protocol] => ICAP
            [m_dir] => 
            [m_src] => 
            [m_dest] => 
            [m_filetype] => 
            [m_file_ext] => 
            [m_comment] => 
            [m_dst] => 
        )

    [1] => simpleobjectelement Object
        (
            [m_name] => icap
            [m_pmod] => 
            [m_protocol] => ICAP
            [m_dir] => 
            [m_src] => 
            [m_dest] => 
            [m_filetype] => 
            [m_file_ext] => 
            [m_comment] => 
            [m_dst] => 
        )

    [2] => simpleobjectelement Object
        (
            [m_name] => TEST
            [m_pmod] => 
            [m_protocol] => ANY
            [m_dir] => 
            [m_src] => 
            [m_dest] => 
            [m_filetype] => 
            [m_file_ext] => 
            [m_comment] => 
            [m_dst] => 
        )

    [3] => simpleobjectelement Object
        (
            [m_name] => POP21
            [m_pmod] => 
            [m_protocol] => ANY
            [m_dir] => 
            [m_src] => 
            [m_dest] => 
            [m_filetype] => 
            [m_file_ext] => 
            [m_comment] => 
            [m_dst] => 
        )

    [4] => simpleobjectelement Object
        (
            [m_name] => p2p
            [m_pmod] => UNSECURE
            [m_protocol] => P2P
            [m_dir] => 
            [m_src] => 
            [m_dest] => 
            [m_filetype] => 
            [m_file_ext] => 
            [m_comment] => 
            [m_dst] => 
        )

    [5] => complexobjectelement Object
        (
            [m_name] => myname_1
            [m_pmod] => 
            [m_protocol] => 
            [m_bool_expr] => K_ANY_1
            [m_comment] => mycomment
        )

    [6] => complexobjectelement Object
        (
            [m_name] => p2pcompl
            [m_pmod] => 
            [m_protocol] => 
            [m_bool_expr] => p2p
            [m_comment] => 
        )

    [7] => complexobjectelement Object
        (
            [m_name] => qq
            [m_pmod] => 
            [m_protocol] => 
            [m_bool_expr] => p2p
            [m_comment] => 
        )

)

Автор: Feldmarschall 17.3.2008, 16:05
$_SESSION - это обычный массив.
поэтому и работать с ним надо так же, как с любым другим массивом.
В частности, если ты что-то хочешь записать в массив, то надо указывать элемент массива ,в который хочешь записать.

Автор: MeIsGremlin 17.3.2008, 16:16
Цитата(Feldmarschall @ 17.3.2008,  16:05)
$_SESSION - это обычный массив.
поэтому и работать с ним надо так же, как с любым другим массивом.
В частности, если ты что-то хочешь записать в массив, то надо указывать элемент массива ,в который хочешь записать.

 smile 

Автор: gta4kv 17.3.2008, 16:52
MeIsGremlin

Код

$_SESSION[ 'element' ] = "value";


Делов то!

Добавлено через 1 минуту и 36 секунд
Код

print $_SESSION[ 'element' ];

Выдаст - value

Добавлено через 2 минуты и 40 секунд
С твоим примером :

Код

print $_SESSION[ 0 ][ 'm_name' ] ;

Автор: MeIsGremlin 17.3.2008, 17:05
Цитата(gta4kv @ 17.3.2008,  16:52)
MeIsGremlin

Код

$_SESSION[ 'element' ] = "value";


Делов то!

Добавлено @ 16:54
Код

print $_SESSION[ 'element' ];

Выдаст - value

Добавлено @ 16:55
С твоим примером :

Код

print $_SESSION[ 0 ][ 'm_name' ] ;

кажется вы не поняли суть вопроса

complexobjectelement Object  это  Object а не Array тип данных поэтому я не могу просто обратиться как 
Код

print $_SESSION[ 0 ][ 'm_name' ] ;

    это мне ничегоне выведет. А мне нужно как-то поменять значение! Внимательно посмотртите структуру массива я ведь написал что это массив объектов

Добавлено через 1 минуту и 44 секунды
Я пробовал сериализировать и пробовал array_walk но что-то не получается это потом снова вернуть в сессию после изменений

Автор: gta4kv 17.3.2008, 17:09
Ну тогда:

$array->simpleobjectelement->m_name;

Добавлено через 52 секунды
если и не так, то тогда не понял вопроса smile

Автор: MeIsGremlin 17.3.2008, 17:23
Вопрос в том что в сессии хранятся массивы объектов естественно с информацией о классах и прочей лабудой им свойственной. При определенном событии просихмодит следующий перебор

Код

 foreach ($_SESSION['acl']['object'] as $id => $obj )
    {
        if(strcmp(get_class($obj),"complexobjectelement") == 0)
        {
             $obj->setBool($expr)  //  то есть вызываетяс метод объекта
               //  и тд
         }
}


После всего этого хотелось бы соответствующие значение изменить и в сессии чтоб после print_r($_SESSION['acl']['object']) у меня выодился такой-же массив как  тут http://forum.vingrad.ru/forum/topic-201083/unread-1/anchor-entry1445220/0.html#  но уже с измененными данными

Автор: Canarat 17.3.2008, 17:43
MeIsGremlin, работай тогда не с $obj, а с ссылкой $object=& $_SESSION['acl']['object'][$key] ($object->setBool()) и тогда изменения буду происходить непосредственно в сессии.

Автор: MeIsGremlin 17.3.2008, 17:53
О спасибо большое выручил дружище!

Автор: MeIsGremlin 17.3.2008, 17:54
О спасибо большое выручил дружище!

Автор: Canarat 17.3.2008, 17:57
MeIsGremlin, пометь тему решенной, вверху страницы.

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