Сборка JSON с php echo операторами - PullRequest
2 голосов
/ 18 августа 2011

Я пытаюсь построить массив JSON из массива php. Это моя функция в моем контроллере.

function latest_pheeds() {
            if($this->isLogged() == true) {
            $this->load->model('pheed_model');
            $data = $this->pheed_model->get_latest_pheeds();
            $last = end($data);
            echo "[";
                for($i = 0; $i < count($data); $i++) {
                    echo '{"user_id":"'.$data[$i][0]['user_id'].'",';
                    echo '"pheed_id":"'.$data[$i][0]['pheed_id'].'",';
                    echo '"pheed":"'.$data[$i][0]['pheed'].'",';
                    echo '"datetime":"'.$data[$i][0]['datetime'].'",';
                        if($i == count($data)) {
                        echo '"comments":"'.$data[$i][0]['comments'].'"}';
                        }else {
                            echo '"comments":"'.$data[$i][0]['comments'].'"},';
                        }
                    }

                echo "]";
            }
            return false;
    }

Возвращает массив json, подобный этому

[{"user_id":"9","pheed_id":"2","pheed":"This is my first real pheed, its got potential ","datetime":"1313188898","comments":"0"},{"user_id":"9","pheed_id":"11","pheed":"My stomach being hurting all day","datetime":"1313422390","comments":"0"},{"user_id":"9","pheed_id":"11","pheed":"My stomach being hurting all day","datetime":"1313422390","comments":"0"},{"user_id":"9","pheed_id":"10","pheed":"Thank God for stackoverflow.com ","datetime":"1313358605","comments":"0"},]

Но я не могу показатьсячтобы получить к нему доступ с помощью jquery

Ответы [ 2 ]

8 голосов
/ 18 августа 2011

Я полагаю, что проблема заключается в запятой в конце вашего массива.

Вместо того, чтобы пытаться кодировать его самостоятельно, используйте функцию PHP json_encode . Он был проверен и проверен много-много раз, поэтому вам не нужно изобретать велосипед.

1 голос
/ 18 августа 2011

Уже проголосовал за @derekerdmann, но подумал, что я добавлю ...

Ваш код будет работать, если вы измените:

if($i == count($data)) {

на

if($i == count($data) - 1) {

Но, не делай этого.Если вы просто помещаете все данные из каждого элемента массива $data в json, тогда вы сможете просто json_encode($data).Если вы вытаскиваете только определенные части, то создайте вторичный массив ваших отфильтрованных данных и вместо него json_encode.

function latest_pheeds() {
    if($this->isLogged() == true) {
        $this->load->model('pheed_model');
        $data = $this->pheed_model->get_latest_pheeds();
        $filtered_items = array();
        foreach ($data as $member) {
            $filtered_item = array();
            $filtered_item['user_id'] = $member['user_id'];
            $filtered_item['pheed_id'] = $member['pheed_id'];
            ...
            ...
            $filtered_items[] = $filtered_item;
        }
        echo json_encode($filtered_items);
    }
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...