Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, tô com grande dificuldade em resolver isso e fico agradecido a quem poder explicar ou dar um exemplo prático.
Não consigo acessar o seguinte array como objeto:
$array = array("test" => array( "EMP_V"=> "7", "EMPRESA"=> "EMP1" ) ,
"test2" => array( "EMP_V"=> "2", "EMPRESA"=> "EMP2") );
foreach($array as $campo){
echo $campo->EMPRESA."<br>";
}
Mas consigo acessar assim:
$array = array("test" => array( "EMP_V"=> "7", "EMPRESA"=> "EMP1" ) ,
"test2" => array( "EMP_V"=> "2", "EMPRESA"=> "EMP2") );
foreach($array as $campo){
echo $campo['EMPRESA']."<br>";
}
Alguém sabe onde está o erro?
Complementando, ele é o originado do seguinte código:
$x=0;
//Criar um array
$array = array();
//Transfere os dados para o array
while ($row = oci_fetch_array($statement, OCI_ASSOC)){
$x++;
$array[$x] = $row;
}Em resumo: array é array, objeto é objeto. Impossivel acessar um array como se acessa um objeto e impossível acessar um objeto como se acessa um array, para tal, você precisa realizar a conversão, aí entra o amigo Google ou, ler o comentário do amigo a cima que ja te deu mastigado e regurgitado rs.
Olá, Vlw!
Matheus Silva, realmente a explicação do Gabriel foi muito boa.
Passarei a utilizar desta forma.
>
Citar
Em resumo: array é array, objeto é objeto.
Perguntei neste tópico porque na aplicação que desenvolvo, o modelo básico que utiliza é este:
Banco Oracle11g.
Retorno do Select com While e passando para JSON.
$statement = oci_parse($conexao, $sql);
oci_execute($statement);
$x = 0;
while ($row = oci_fetch_array($statement, OCI_ASSOC)){
$array[$x] = array(
'empresa' => $row['EMPRESA'],
'data_venda' => $row['DATA_VENDA'],
'data_resposta' => $row['DATA_RESPOSTA'] ,
'valor_compra' => $row['VALOR_COMPRA'],
'valor_venda' => $row['VALOR_VENDA']
);
$x++;
}
$json_dados = json_encode($array);
Em outra parte da aplicação pego o retorno e converto.
$json_dados = json_decode($json_dados);
foreach( $json_dados as $d)
{
echo $d->empresa;
echo $d->valor_venda - Valor_compra;
}
Então, este modelo utilizo e acesso sem problemas o retorno de um array como objeto e nunca converti.
Gabriel, value pela explicação!!
A organização do array para identificação e tal eu já faço, aqui no site é que vacilei....
No Oracle não encontrei esse retorno como Objeto para transformar o retorno de um select.
Com modelo que eu faço o acesso fácil, mas quando passo todo o retorno sem indentação para pegar o seu retorno no foreach é que não dá ceto...Acho que acontece... kkk
Confesso que realmente não tinha achado, tão óbvio, mas...
Agradeço a todos pelas explicações, deu certo!!
Vou ajustar o meu projeto de acordo com o aprendido aqui!
Ali você usa sem problemas dando o json decode pois quando você converte um array para json (json_encode), ele transforma o array em uma string (json), e quando você decodifica a string utilizando o json_decode, ele retorna os dados como um objeto, não como um array, a não ser que seja passado um segundo parametro... exemplo:
$data = [
'algo' => [
'k1' => 'v1',
'k2' => 'v2',
'k3' => 'v3'
]
];
$json = json_encode( $data );
$object = json_decode( $json );
var_dump( $object );
$array = json_decode( $json , true );
var_dump( $array );
No caso, se você passar o true (por padrão false, o que faz retornar object) como segundo parametro do json_decode, ele irá retornar um array...>
16 horas atrás, Ericsson Berg disse:
...
$x = 0;
while ($row = oci_fetch_array($statement, OCI_ASSOC)){
$array[$x] = array(
'empresa' => $row['EMPRESA'],
'data_venda' => $row['DATA_VENDA'],
'data_resposta' => $row['DATA_RESPOSTA'] ,
'valor_compra' => $row['VALOR_COMPRA'],
'valor_venda' => $row['VALOR_VENDA']
);
$x++;
}
$json_dados = json_encode($array);
Na boa, isso é redundância de código, se quer os índices em **minúsculos** que corrija o banco, ou use [array_map](http://php.net/manual/pt_BR/function.array-map.php), convertendo os índices para **minúsculos**, agora se está abstraindo de um banco já existente o correto é manter o padrão da matriz.
Em uma unica linha faz a mesma coisa.
$json_dados = json_encode( oci_fetch_array($statement, OCI_ASSOC) );
Modelar banco de dados com letras em maiúsculas é froid.Matheus, valeu pela explicação! !
Williams, o banco já existe e não tem como mexer.
Usarei o array_map e essa forma de resumir o retorno foi show!!
Vlw!
Outra opção para converter índice de banco é usando o atributo abaixo:
http://php.net/manual/pt_BR/pdo.setattribute.php
+
PDO::CASE_LOWER: Force column names to lower case.
Bom primeiro de tudo (na minha visão) é sempre melhor tentar 'humanizar' a parada.
Indentação é uma otima maneira de enxergar uma estrutura de dados...
Veja qual maneira está melhor de ver os dados:
(Sem indentação)
$array = array(>
Citar
Dúvida em acessar Array multidimensional como Objeto
Em programação existe tipos de dados, e esses tipos podem ser convertidos (Casting/Cast/Conversion)
https://en.wikipedia.org/wiki/Type_conversion
No php simplesmente se passa a variavel:
Ex:
<?php
$array = array(
stdClass Object
(
stdClass Object
(