Ir para conteúdo
Omar~

Help em Array de objetos

Recommended Posts

É o seguinte digamos que eu tenha uma array associativa tipo assim:

$assoArr = ['Indice1' => 'Valor 1', 'Indice2' => 'Valor 2'];

 

Logo então posso acessar cada índice da array ($assoArr['Indice1'])

Então criei uma função para transformar em objetos

function objArr($array) {
    $object = new stdClass();
    if (is_array($array)) {
        foreach ($array as $name => $value) {
            $object->$name = $value;
        }
    }
    return $object;
}

Assim converto a array

$converte = objArr($assoArr);

Acessando cada índice $converte->Indice1;

 

Blz, Tudo funcionando.... Mas e no caso de uma array multi-dimensional?

Tentei já de tudo,  mas não consigo passar arrays internas a índices para dentro de funções, exceto seu eu usar object revesado na array eu repassando a função:

Na pática seria para funcionar mais ou menos arrim

$assoArr = [
    'Indice1' => 'Valor 1',
    'Indice2' => [
        'Valor1_Ind2' => 'Dados1',
        'Valor2_Ind2' => 'Dados2'
    ]
];

$converte = objArr($assoArr);

 

Para acessar dessa forma $converte->Indice2->Valor1_Ind2;

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Permita-me perguntar: qual o sentido disso? Pq não trabalhar com arrays, já que os dados já se encontram dessa forma?

 

Existem várias formas, mas as primeiras que eu consigo imaginar são:

 

1 - Type cast para objeto, mas isso não é recursivo (você precisará aplicar também nos arrays filhos quando for multidimensional).

$objeto = (object)$array;

 

2 - Convertendo para JSON e de JSON para objeto novamente, assim:

$objeto = json_decode( json_encode( $array ) );

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 horas atrás, Matheus Tavares disse:

Permita-me perguntar: qual o sentido disso? Pq não trabalhar com arrays, já que os dados já se encontram dessa forma?

 

Por questões de estudo e prática.

 

10 horas atrás, Matheus Tavares disse:

1 - Type cast para objeto, mas isso não é recursivo (você precisará aplicar também nos arrays filhos quando for multidimensional).


$objeto = (object)$array;

 

2 - Convertendo para JSON e de JSON para objeto novamente, assim:


$objeto = json_decode( json_encode( $array ) );

 

Conheço essas formas

 

Mas a questão é criar uma função que automatizará esse processo de conversão toda vez que uma array é criada.

 

Bem.... a solução mais prática seria assim:

function objArr($array) {
    if (is_array($array)) {
        return (object) array_map(__FUNCTION__, $array);
    } else {
        return $array;
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por 7Canim
      Estou fazendo uma operação via suap e recebendo objetos, por exemplo, assim: 
       
      Eu quero colocar os dados recebidos em um array, mas não sei como acessar os dados dentro desses objetos, por exemplo o acessoFazenda .
       
      Código que eu estou usando para receber o objeto e colocar no array
      $cods = array(1, 2, 3, 4, 5, 6); for($i = 0; $i < count($cods); $i++){ try { $wsdl_url = 'http://homolog.agricultura.gov.br/sisbov_ws_nova_hom/'; $client = new SOAPClient($wsdl_url); $params = array( 'usuario' => "XXXXXXXXXX", 'senha' => "XXXXXXXXX", 'idPropriedade' => $cods[$i], ); $return = $client->consultarPropriedade($params); // print_r($return); echo '</br></br></br>'; } catch (Exception $e) { echo "Exception occured: " . $e; } $prop = array( "codPropriedade" => $cods[$i], "acessoFazenda" => $return->Object->acessoFazenda, );  
       
      Desde já agradeço
    • Por jardeldint
      Olá pessoal, tudo bem?
       
      Procurei no fórum, não não achei o que eu estou precisando.. A minha dúvida é a seguinte!
       
      Primeiro quero dizer que não sei quase (pra não dizer nada) de php. To apenas tentando entender esse mundo show da programação. Más gosto de "fuçar" nos códigos.
       
      Tenho um sistema feito em php + codeigneter, onde tem uma área de edição de OS (Ordem de serviços), na aba produtos tem os campos comuns, que são: Descrição, Quantidade e Subtotal e no final da table tem o total.
      Na aba serviços, tem apenas descrição e o botão adicionar.
       
      Eu preciso inserir nessa aba, o campo Quantidade, para que possa multiplicar o básico que é o valor (que é puxado do BD) pela quantidade, como por exemplo, um dos serviços é a Hora Técnica.
       
      Abaixo tem o código original e o que eu tentei modificar (e deu errado):
       
      ORIGINAL:
      <tbody> <?php $total = 0; foreach ($servicos as $s) { $preco = $s->preco; $total = $total + $preco; echo '<tr>'; echo '<td>'.$s->nome.'</td>'; echo '<td><span idAcao="'.$s->idServicos_os.'" title="Excluir Serviço" class="btn btn-danger"><i class="icon-remove icon-white"></i></span></td>'; echo '<td>R$ '.number_format($s->preco,2,',','.').'</td>'; echo '</tr>'; }?> <tr> <td colspan="2" style="text-align: right"><strong>Total:</strong></td> <td><strong>R$ <?php echo number_format($total,2,',','.');?><input type="hidden" id="total-servico" value="<?php echo number_format($total,2); ?>"></strong></td> </tr> </tbody> O MODIFICADO:
      <tbody> <?php $total = 0; foreach ($servicos as $s) { $preco = $s->preco; $total = $total + $s->subTotal; echo '<tr>'; echo '<td>'.$s->descricao.'</td>'; echo '<td>'.$s->quantidade.'</td>'; echo '<td><a href="" idAcao="'.$s->idServicos_os.'" servAcao="'.$s->idServicos.'" quantAcao="'.$s->quantidade.'" title="Excluir Produto" class="btn btn-danger"><i class="icon-remove icon-white"></i></a></td>'; echo '<td>R$ '.number_format($s->subTotal,2,',','.').'</td>'; echo '</tr>'; }?> <tr> <td colspan="3" style="text-align: right"><strong>Total:</strong></td> <td><strong>R$ <?php echo number_format($total,2,',','.');?><input type="hidden" id="total-venda" value="<?php echo number_format($total,2); ?>"></strong></td> </tr> </tbody> No HTML da parte dos serviços, inseri exatamente como está em produtos (apenas alterando as variáveis), como está abaixo:
      <div class="span12 well" style="padding: 1%; margin-left: 0"> <form id="formServicos" action="<?php echo base_url() ?>index.php/os/adicionarServico" method="post"> <div class="span8"> <input type="hidden" name="idServico" id="idServico" /> <input type="hidden" name="idOsServico" id="idOsServico" value="<?php echo $result->idOs?>" /> <input type="hidden" name="preco" id="preco" value=""/> <label for="">Serviço</label> <input type="text" class="span12" name="servico" id="servico" placeholder="Digite o nome do Serviço" /> </div> <div class="span2"> <label for="">Quantidade</label> <input type="text" placeholder="Quantidade" id="quantidade" name="quantidade" class="span12" /> </div> <div class="span2"> <label for="">.</label> <button class="btn btn-success span12" id="servico"><i class="icon-white icon-plus"></i> Adicionar</button> </div> </form> </div> Más a bronca é que está dando esse erro:
       
      A PHP Error was encounteredSeverity: Notice
      Message: Undefined property: stdClass::$quantidade
      Filename: os/editarOs.php
      Line Number: 239
      A PHP Error was encounteredSeverity: Notice
      Message: Undefined property: stdClass::$quantidade
      Filename: os/editarOs.php
      Line Number: 240
      Isso na página de edição da OS.
       
      Alguém pode me ajudar a resolver essa bronca?
       
      Fico no aguardo!
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.