AJBM Posted May 10, 2013 at 05:02 PM Report #506746 Posted May 10, 2013 at 05:02 PM (edited) Boas! Eu tenho um ficheiro Json onde tenho informação sobre varios actores, a informacao e esta. Array ( [0] => Array ( [actorID] => a1 [actorName] => Scarlett Johansson [description] => Scarlett Johansson was born in New York City...... [gender] => F [externalImageUrl] => http://ia.media-imdb.com/images/M/MV5BMTUwNzMwMzgyOV5BMl5BanBnXkFtZTcwMjk0ODY1NA@@._V1._SX214_CR0,0,214,314_.jpg [externalUrl] => http://www.imdb.com/name/nm0424060/ ) [1] => Array ( [actorID] => a2 [actorName] => Samuel L. Jackson [description] => Samuel L. Jackson usually played bad guys and drug addicts before becoming an action hero...... [gender] => m [externalImageUrl] => http://ia.media-imdb.com/images/M/MV5BMTQ1NTQwMTYxNl5BMl5BanBnXkFtZTYwMjA1MzY1._V1._SX214_CR0,0,214,314_.jpg [externalUrl] => http://www.imdb.com/name/nm0000168/ ) [2] => Array ( [actorID] => a3 [actorName] => Mila Kunis [description] => The talented Milena "Mila" Markovna Kunis was born in Chernivtsi, Ukraine, USSR...... [gender] => F [externalImageUrl] => http://ia.media-imdb.com/images/M/MV5BODQyNTQyNzY4MV5BMl5BanBnXkFtZTcwODg5MDA3MQ@@._V1._SY314_CR24,0,214,314_.jpg [externalUrl] => http://www.imdb.com/name/nm0005109/ ) [3] => Array ( [actorID] => a4 [actorName] => Jennifer Lawrence [description] => Actress Jennifer Lawrence, best-known for playing Katniss Everdeen in The Hunger Games, was born in Louisville.... [gender] => F [externalImageUrl] => http://ia.media-imdb.com/images/M/MV5BMTM4OTY2MDY1M15BMl5BanBnXkFtZTcwNDYyNDM3NA@@._V1._SY314_CR1,0,214,314_.jpg [externalUrl] => http://www.imdb.com/name/nm2225369/ ) ) eu queria criar um actor com base na informação deste ficheiro, mas nao estou a conseguir.. Eu estou a tentar imprimir public function carregarParaBaseDados($tipo, $ficheiro) { $dados = file_get_contents($ficheiro); $json = json_decode($dados, true); $actor = new Actor(); //nao funciona print $json["actorID"]; //nao funciona, fiz isto porque no formato parece array[0]{array actor} for($i=0;$i<1;$i++){ foreach ($json as $value) { print$json[$i]->getActorID(); } } Edited May 10, 2013 at 06:19 PM by AJBM
taviroquai Posted May 10, 2013 at 05:20 PM Report #506748 Posted May 10, 2013 at 05:20 PM Hmm deves querer isto: actor->id = $json[$i]['actorID']; Mas o melhor seria teres algo como: $actor->import($json[$i]);
AJBM Posted May 10, 2013 at 05:36 PM Author Report #506749 Posted May 10, 2013 at 05:36 PM No teu primeiro caso funciona mas da-me isto notice: Undefined index: actorID in C:\xampp\htdocs\AlugaMeEsteFilme\Negocio\OperacoesSite.php on line 196 no teu segundo caso o import, tenho de definir lo ou ele já vem definido?
yoda Posted May 10, 2013 at 06:00 PM Report #506756 Posted May 10, 2013 at 06:00 PM Usando esta classe podes atribuir os valores do JSON a um objecto PHP : class Actor { private $attributes = array(); public function __get($key) { if (array_key_exists($key, $this->attributes)) { return $this->attributes[$key]; } return false; } public function __set($key, $value) { $this->attributes[$key] = $value; return; } } Incluis o código acima no PHP (pode ser no fim do ficheiro) Para usar basta isto : $actor = new Actor(); foreach ($json as $key=>$value) { $actor->$key = $value; } echo $actor->actorName; before you post, what have you tried? - http://filipematias.info sense, purpose, direction
AJBM Posted May 10, 2013 at 06:15 PM Author Report #506759 Posted May 10, 2013 at 06:15 PM (edited) Usando esta classe podes atribuir os valores do JSON a um objecto PHP : class Actor { private $attributes = array(); public function __get($key) { if (array_key_exists($key, $this->attributes)) { return $this->attributes[$key]; } return false; } public function __set($key, $value) { $this->attributes[$key] = $value; return; } } Incluis o código acima no PHP (pode ser no fim do ficheiro) No ficheiro json??? ou na minha classe actor eu inclui na minha classe actor Para usar basta isto : $actor = new Actor(); foreach ($json as $key=>$value) { $actor->$key = $value; } echo $actor->actorName; Não esta a funcionar, se eu fizer print_r($actor) imprime o conteúdo do array mas se eu so quiser o nome nao da PS: eu disse em cima que o ficheiro continha a informação de um autor mas contem a informação de vários autores, so reparei nisso agora Depois de eu ter os actores criados, quero carrega los para uma base dados, será melhor eu carregar a informação directamente como esta no ficheiro json ou crio primeiro os actores e depois carrego para a base dados Edited May 10, 2013 at 06:23 PM by AJBM
yoda Posted May 11, 2013 at 05:52 PM Report #506928 Posted May 11, 2013 at 05:52 PM Vais ter de pensar e expor o teu problema melhor. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
taviroquai Posted May 11, 2013 at 09:13 PM Report #506939 Posted May 11, 2013 at 09:13 PM (edited) @AJBM Queria dizer isto... Define um método import na tua classe Actor public function import($arr) { if (!is_array($arr)) return false; foreach ($arr as $key=>$value) { if (isset($this->$key)) $this->$key = $value; } return true; } Agora podes usar nesse ficheiro que lê o JSON... $lista = array(); foreach ($json as $item) { $actor = new Actor(); if ($actor->import($item)) $lista[] = $actor; } Depois de eu ter os actores criados, quero carrega los para uma base dados, será melhor eu carregar a informação directamente como esta no ficheiro json ou crio primeiro os actores e depois carrego para a base dados Se não precisas fazer nada com os objectos Actor antes de colocar na base de dados, não precisas criar os objectos... a não ser se tenhas algum mecanismo nos objectos que permitar guardá-los na base de dados... mas mais eficiente será fazer um foreach ao JSON e colocar numa query para salvar os dados, algo assim: foreach ($json as $item) { // query para salvar os dados, por exemplo com PDO $pdo->query('INSERT INTO (bla, bla, bla) VALUES (?, ?, ?)', $item); } Edited May 11, 2013 at 09:31 PM by taviroquai
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now