Преобразование обьекта в массив

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Catch
Сообщения: 46
Зарегистрирован: 2013.10.14, 21:41

Преобразование обьекта в массив

Сообщение Catch »

Есть ли у yii штатные методы для преобразования объекта в массив?
А то, то, что я написал, мне кажется не самый лучший вариант... )

И да, вопрос не по теме, данный к чему должен относится (модель или контроллер) ?

Код: Выделить всё

    public static function getRole($IDs = false)
    {
        $result = array();
        
        if ($IDs === false)
        {
            $model = Role::model()->findAll();
            for ($i = 0; $i < sizeof($model); $i++)
            {
                $result[$i]['id'] = $model[$i]->id;
                $result[$i]['name'] = $model[$i]->name;
            }
        }
        else
        {
            $model = Role::model()->findAllByPk($IDs);
            for ($i = 0; $i < sizeof($model); $i++)
            {
                $result[$i]['id'] = $model[$i]->id;
                $result[$i]['name'] = $model[$i]->name;
            }
        }
        return $result;
    } 
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Преобразование обьекта в массив

Сообщение anton44eg »

тут проще DAO использовать

в модели
Аватара пользователя
Catch
Сообщения: 46
Зарегистрирован: 2013.10.14, 21:41

Re: Преобразование обьекта в массив

Сообщение Catch »

Можно немножко по-подробнее, а то я совсем новичек)
В общем мне нужно, к примеру, чтоб в dropDownList передавать этот массив и получать

Код: Выделить всё

array(1=>'somename', 2=>'somename'); 
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Преобразование обьекта в массив

Сообщение slavcodev »

Код: Выделить всё

CHtml::listData($models, 'id', 'name'); 
Жду Yii 3!
yan
Сообщения: 942
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Преобразование обьекта в массив

Сообщение yan »

Catch писал(а):Можно немножко по-подробнее, а то я совсем новичек)
В общем мне нужно, к примеру, чтоб в dropDownList передавать этот массив и получать

Код: Выделить всё

array(1=>'somename', 2=>'somename'); 
http://www.yiiframework.com/doc/api/1.1 ... ata-detail
да и вообще грешно так в пхп писать

Код: Выделить всё

for ($i = 0; $i < sizeof($model); $i++) 
когда есть foreach
Аватара пользователя
Catch
Сообщения: 46
Зарегистрирован: 2013.10.14, 21:41

Re: Преобразование обьекта в массив

Сообщение Catch »

;)Спасибо
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Преобразование обьекта в массив

Сообщение slavcodev »

Еще грешно использовать sizeof в count for, т.к. количество вычисляется на каждой итерации.
Лучше записать размер массива в переменную.
Жду Yii 3!
Аватара пользователя
Catch
Сообщения: 46
Зарегистрирован: 2013.10.14, 21:41

Re: Преобразование обьекта в массив

Сообщение Catch »

Всем спасибо за советы)


И еще вопрос, вот у меня в базе записаны роли (типа того, как одна новость принадлежит к нескольким категориям).
Хранится в базе она в таком формате 1,2,3,4,5,6 собственно есть ли более лучшее решение для такого вопроса?

Код: Выделить всё

$model->getRole('1,2,3,4,5');

Код: Выделить всё

$IDs = explode(',', $IDs);
$model = Role::model()->findAllByPk($IDs);
$data = CHtml::listData($model, 'id', 'name');
$result = '';
foreach ($data as $v)
{
    $result .= $v.', ';
}
return substr($result, 0, -2);
Вот полный метод, возможно еще есть какие-то замечание и.т.д :?

Код: Выделить всё

    public function getRole($IDs = false, $getNamesByIDsFromString = false)
    {
        if ($IDs === false)
            $model = Role::model()->findAll();
        if (is_string($IDs) && $getNamesByIDsFromString === true)
        {
            $IDs = explode(',', $IDs);
            $model = Role::model()->findAllByPk($IDs);
            $data = CHtml::listData($model, 'id', 'name');
            $result = '';
            foreach ($data as $v)
            {
                $result .= $v.', ';
            }
            return substr($result, 0, -2);
        }
        if (is_array($IDs))
            $model = Role::model()->findAllByPk($IDs);
        return $model;
    } 
Аватара пользователя
wokster
Сообщения: 308
Зарегистрирован: 2013.09.06, 14:12
Контактная информация:

Re: Преобразование обьекта в массив

Сообщение wokster »

Мне кажется хранить лучше в виде serialize
$model->массив = serialize($model->массив);
а потом
$массив = unserialize($model->массив);
Ответить