Конвертировать перечисленные записи в объект php - PullRequest
0 голосов
/ 06 апреля 2010

У меня есть таблица, содержащая несколько таких записей:

+-----------+--------+----------+
| extension | fwd_to | type     |
+-----------+--------+----------+
| 800       | 11111  | noanswer |
| 800       | 12345  | uncond   |
| 800       | 22222  | unavail  |
| 800       | 54321  | busy     |
| 801       | 123    | uncond   |
+-----------+--------+----------+

и т.д.

Запрос выглядит так:

select fwd_to, type from forwards where extension='800';

Теперь я возвращаю массив, содержащий объекты, которые выглядят следующим образом при печати с помощью Kohana :: debug:

(object) stdClass Object
(
    [fwd_to] => 11111
    [type] => noanswer
)

(object) stdClass Object
(
    [fwd_to] => 12345
    [type] => uncond
)

(object) stdClass Object
(
    [fwd_to] => 22222
    [type] => unavail
)

(object) stdClass Object
(
    [fwd_to] => 54321
    [type] => busy
)

Что бы я хотел сделать, это преобразовать это в объект этой формы:

(object) stdClass Object
(
    [busy] => 54321
    [uncond] => 12345
    [unavail] => 22222
    [noanswer] => 11111
)

Причина в том, что я хочу затем вызвать json_encode. Это позволит мне использовать jquery populate для заполнения формы.

Есть ли предложенный способ, которым я могу сделать это красиво? Я довольно новичок в PHP, и я уверен, что это легко, но это ускользает от меня на данный момент.

Ответы [ 2 ]

1 голос
/ 06 апреля 2010

Это уродливый хак, но делает свою работу:

$newObj = new stdClass();
// $resultArray is the query return
foreach($resultArray as $obj) {
    $newObj->{$obj->type} = $obj->fwd_to;
}
0 голосов
/ 06 апреля 2010

Хорошо, это мой собственный ответ. Не уверен, что это самый оптимальный способ, но он работает. Вместо использования объекта. Я использую ассоциативный массив, который также даст тот же результат при вызове json_encode.

$this->template->content->call_forwarding = array();

$forwards = $phones->fetch_call_forwarding_numbers($this->account, $id);
foreach($forwards as $value){
    $this->template->content->call_forwarding[$value->type] = $value->fwd_to;
}

echo Kohana::debug($this->template->content->call_forwarding);

выходы:

(array) Array
(
    [noanswer] => 11111
    [uncond] => 12345
    [unavail] => 22222
    [busy] => 54321
)

Затем, вызывая json_encode, я получаю результат. то есть echo Kohana :: debug (json_encode ($ this-> template-> content-> call_forwarding));

(string) {"noanswer":"11111","uncond":"12345","unavail":"22222","busy":"54321"}
...