Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, não consigo entender o seguinte código: <? class Tipo { public $Id. public $Nome. } for ($i=0. $i<10. $i++) { $categoria = new Tipo(). $categoria->Id = $i. $categoria->Nome = "Categoria número $i". $categorias[$i] = $categoria. } $inicio = 4. $categorias2 = Array(). for ($i=0. $i<10. $i++) { if ($i < $inicio) continue. $categoria = new Tipo(). $categoria->Id = $i. $categoria->Nome = "Categoria número $i". $categorias2[$i] = $categoria. } echo "<pre>". echo json_encode($categorias). */** o retorno é o seguinte [{"Id":0,"Nome":"Categoria n\u00famero 0"},{"Id":1,"Nome":"Categoria n\u00famero 1"},{"Id":2,"Nome":"Categoria n\u00famero 2"},{"Id":3,"Nome":"Categoria n\u00famero 3"},{"Id":4,"Nome":"Categoria n\u00famero 4"},{"Id":5,"Nome":"Categoria n\u00famero 5"},{"Id":6,"Nome":"Categoria n\u00famero 6"},{"Id":7,"Nome":"Categoria n\u00famero 7"},{"Id":8,"Nome":"Categoria n\u00famero 8"},{"Id":9,"Nome":"Categoria n\u00famero 9"}] **/ echo "<br>". echo json_encode($categorias2). /** o retorno é o seguinte {"4":{"Id":4,"Nome":"Categoria n\u00famero 4"},"5":{"Id":5,"Nome":"Categoria n\u00famero 5"},"6":{"Id":6,"Nome":"Categoria n\u00famero 6"},"7":{"Id":7,"Nome":"Categoria n\u00famero 7"},"8":{"Id":8,"Nome":"Categoria n\u00famero 8"},"9":{"Id":9,"Nome":"Categoria n\u00famero 9"}} **/ ?>* Porque na primera parte o php codifica em json do tipo array e da segunda forma ele gera um tipo objeto com o $inicio sendo uma propriedade deste objeto, sendo que foi passado para a função json_encode apenas a variável $categorias, que não possui de forma alguma o $inicio, o interessante é que se der um print_r em ambas variáveis, poderemos notar que ambas são arrays e não possuem a propriedade $inicio. Há alguma configuração para resolver isso? Preciso que sempre me seja retornado da primeira forma, mas preciso usar variáveis no loop. Alguém já passou por este problema? Como resolveram?
Pois é Leozitho, interessante este comportamento do PHP com relação ao json_enconde, mas como não consegui fazer funcionar da forma que desejo, tive que fazer de outra forma, e consegui resolver, na verdade eram testes para o padrão MVVM, e trabalhando com os dados diretos do banco de dados esse problema não ocorre, menos mal, espero não precisar deste tipo de algorítmo sem ser oriundo de banco de dados, pois vai ser triste ter que partir para uma solução digamos mais estilo POG.. ehehe
De toda forma, obrigado pela atenção.
Acredito que isso ocorra porque o primeiro array começa em zero e todas as chaves são sequenciais, então ele não precisa especificar quais são as chaves.
Já no segundo array a primeira chave começa em 4, então não é um array simples e ele precisa especificar qual é a chave de cada valor.