[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP array in JSON from mysql
kyralesov
господа доброго времени суток, при разработке проекта с использованием backbone.js возник ступор, а именно при переводе информации из базы в массив, а массив в json.
Есть хороший пример от backbone, помогите мне как его расширить что бы получить мой результат, вот пример для api который берет из базы информацию и записывает в массив, но мне массив надо расширить сейчас он выглядит так

<?php

require 'Slim/Slim.php';

$app = new Slim();

$app->get('/moments', 'getWines');
$app->get('/moments/:id', 'getWine');
$app->get('/moments/search/:query', 'findByName');
$app->post('/moments', 'addWine');
$app->put('/moments/:id', 'updateWine');
$app->delete('/moments/:id', 'deleteWine');

$app->run();

function getWines() {
$sql = "select * FROM wine ORDER BY name";
try {
$db = getConnection();
$stmt = $db->query($sql);
$wines = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
// echo '{"wine": ' . json_encode($wines) . '}';
echo json_encode($wines);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}


function getWine($id) {
$sql = "SELECT * FROM wine WHERE id=:id";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("id", $id);
$stmt->execute();
$wine = $stmt->fetchObject();
$db = null;
echo json_encode($wine);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}


function addWine() {
error_log('addWine\n', 3, '/var/tmp/php.log');
$request = Slim::getInstance()->request();
$wine = json_decode($request->getBody());
$sql = "INSERT INTO wine (name, grapes, country, region, year, description) VALUES (:name, :grapes, :country, :region, :year, :description)";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("name", $wine->name);
$stmt->bindParam("grapes", $wine->grapes);
$stmt->bindParam("country", $wine->country);
$stmt->bindParam("region", $wine->region);
$stmt->bindParam("year", $wine->year);
$stmt->bindParam("description", $wine->description);
$stmt->execute();
$wine->id = $db->lastInsertId();
$db = null;
echo json_encode($wine);
} catch(PDOException $e) {
error_log($e->getMessage(), 3, '/var/tmp/php.log');
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}


function updateWine($id) {
$request = Slim::getInstance()->request();
$body = $request->getBody();
$wine = json_decode($body);
$sql = "UPDATE wine SET name=:name, grapes=:grapes, country=:country, region=:region, year=:year, description=:description WHERE id=:id";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("name", $wine->name);
$stmt->bindParam("grapes", $wine->grapes);
$stmt->bindParam("country", $wine->country);
$stmt->bindParam("region", $wine->region);
$stmt->bindParam("year", $wine->year);
$stmt->bindParam("description", $wine->description);
$stmt->bindParam("id", $id);
$stmt->execute();
$db = null;
echo json_encode($wine);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}


function deleteWine($id) {
$sql = "DELETE FROM wine WHERE id=:id";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("id", $id);
$stmt->execute();
$db = null;
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}


function findByName($query) {
$sql = "SELECT * FROM wine WHERE UPPER(name) LIKE :query ORDER BY name";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$query = "%".$query."%";
$stmt->bindParam("query", $query);
$stmt->execute();
$wines = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($wines);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}


function getConnection() {
$dbhost="127.0.0.1";
$dbuser="root";
$dbpass="";
$dbname="backbone";
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $dbh;
}

?>

то есть при запросе http://адрес сайта/api/moments
мне выдают следующий json

[{"id":"13","name":"ARGIANO NON CONFUNDITUR","year":"2009","grapes":"Cabernet Sauvignon","country":"Italy","region":"Tuscany","de scription":"Like a symphony, this cabernet has a wide range of notes that will delight the taste buds and linger in the mind.","picture":"argiano.jpg"}]

Мне же нужно что бы было так

{"timeline":{"moments":[{"minutes":{"time":0,"count":0,"moments":[]}}]}}

то есть я так понимаю массив в массиве и нужно что бы time сразу же при запросе в api загружалась с 0 до 1439, есть range(0,1439) но как через foreach правильно оформить? что бы массив {timeline{moments не входил в цикл, а [{minutes{time и тд шли циклом до 1439, насколько сложна реализация?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.