Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ndias

Ordenar resultado json com php (URGENTE)

Recommended Posts

To desenvolvendo uma maneira de coletar os dados de uma api que na estrutura possui um objeto, e dentro desse objeto possuem vários outros objetos com arrays multidimensionais.

 

Para capturar em php os dados desses objetos, estou fazendo foreach dentro de foreach.

 

Estou conseguindo apresentar o json assim:

{
      "count" : 840,
      "name" : "vandervort",
      "link" : "https://xyz",
   }
   {
      "count" : 834,
      "name" : "deja",
      "link" : "https://xpto",
   },

 

Porém, preciso imprimir esses dados na tela da seguinte maneira:

[
   {
      "count" : 840,
      "name" : "vandervort",
      "link" : "https://xyz.com",
   },
   {
      "count" : 834,
      "name" : "deja",
      "link" : "https://xpto.com",
   },
]

e tenho que ordenar meu foreach para que o resultado apareça primeiro pelo count maior .

 

alguém pode me ajudar, por favor?

 

obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Pra ordenar você pode seguir essa linha de raciocínio:

<?php
$dados = [// Apenas uma simulação do seu exemplo
   (object)[
      "count" => 834,//Perceba que este é o primeiro
      "name" => "deja",
      "link" => "https://xpto.com",
   ],
   (object)[
      "count" => 840,
      "name" => "vandervort",
      "link" => "https://xyz.com",
   ],
];

$comparar_por_count = function( $a, $b ) { return $b->count <=> $a->count; };

usort( $dados, $comparar_por_count );

print_r( $dados );// Agora eles estão invertidos :)

 

Sobre "imprimir da seguinte maneira"... não entendi exatamente o que você deseja.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Matheus, obrigado por sua interação.

 

Me corrija se eu estiver enganado, mas o usort só funciona quando o array já está pronto. No meu caso, eu percorro um array para capturar dados e montar meu json. Para isto estou usando o construtor foreach e neste caso não consigo ordenar o array.

 

Veja meu código:

 

foreach($json as $array1) {
    $count           = $array1->{'count'};
    $user[]          = $array1->{'user'};
    foreach($user as $array2) {
        $name        = $array2->{'name'};
        $link        = $array2->{'link'};
    }
    // Array com dados
    $array = array(
        'count'      => $count,
        'name'       => $name,
        'link'       => $link
    );
    // Mostra os valores
    echo '<pre>';
    echo json_encode( $array ,JSON_PRETTY_PRINT);
    echo '</pre>';   
}

 

Sobre imprimir da seguinte maneira, eu me referi colocar dentro de um array, todo o foreach que gera o json. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por wertycs
      Opa,
       
      Pesquisei no Google e aqui no fórum e não achei nada que ajudasse a solucionar uma questão.
      Tenho o código abaixo cujo resultado seria um ranking baseado numa pontuação que se dá pela soma conforme o trecho:
      <?php echo $nome->Visitas + $this->lib_link->Cliques($nome->nomeCod) + $this->lib_link->Links($nome->nomeCod);?> O problema é que não consigo ordenar em forma decrescente considerando o resultado dessa soma. Alguém consegue ajudar?
      <table> <tbody> <tr> <td>Posição</td> <td>Nome</td> <td>Pontuação</td> </tr> <?php $i = 1; ?> <?php foreach ($nome->result() as $nome) { ?> <tr> <td> <?php echo number_format($i, 0, "", ".") .'º'; ?> </td> <td> <a rel="nofollow" target="_blank" href=""><?php echo $nome->Nome; ?></a> </td> <td> <?php echo $nome->Visitas + $this->lib_link->Cliques($nome->nomeCod) + $this->lib_link->Links($nome->nomeCod);?> </td> </tr> <?php $i++; } ?> </tbody> </table>
    • Por donizeti.junior.ferraz
      Olá, Bom dia/tarde/noite
       
      Tenho uma array com o conteúdo de uma query no Mysql que exibe os produtos de um site, a array está assim:
      Array ( [0] => Array ( [post_name] => nome-do-ar-condicionado-9.000-bth-u [post_title] => Nome do Ar Condicionado 9.000 BTH/u [img] => http://site.com/wp-content/uploads/2015/09/img1.png ) [1] => Array ( [post_name] => nome-do-ar-condicionado-7.000-bth-u [post_title] => Nome do Ar Condicionado 7.000 BTH/u [img] => http://site.com/wp-content/uploads/2015/09/img2.png ) [2] => Array ( [post_name] => nome-do-ar-condicionado-12.000-bth-u [post_title] => Nome do Ar Condicionado 12.000 BTH/u [img] => http://site.com/wp-content/uploads/2015/09/img3.png ) ) O meu problema é a ordem que os registros estão na array. Eu precisava ordenar os registros na array pela potência do produto do menor para o maior, assim:
      Array ( [0] => Array ( [post_name] => nome-do-ar-condicionado-7.000-bth-u [post_title] => Nome do Ar Condicionado 7.000 BTH/u [img] => http://site.com/wp-content/uploads/2015/09/img2.png ) [1] => Array ( [post_name] => nome-do-ar-condicionado-9.000-bth-u [post_title] => Nome do Ar Condicionado 9.000 BTH/u [img] => http://site.com/wp-content/uploads/2015/09/img1.png ) [2] => Array ( [post_name] => nome-do-ar-condicionado-12.000-bth-u [post_title] => Nome do Ar Condicionado 12.000 BTH/u [img] => http://site.com/wp-content/uploads/2015/09/img3.png ) ) Alguma ideia? :P
×

Informação importante

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