Jump to content


Photo

Agrupar E Ordenar Array


  • Faça o login para participar
7 replies to this topic

#1 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 14/12/2009, 13:52

Pessoal, tenho um array assim:
Array
(
    [0] => Array
        (
            [continent] => américa central
            [id] => 0
            [name] => Paulista
            [country] => brasil
        )

    [1] => Array
        (
            [continent] => américa central
            [id] => 1
            [name] => são paulo
            [country] => brasil
        )

    [2] => Array
        (
            [continent] => américa do sul
            [id] => 2
            [name] => hola
            [country] => argentina
        )
)
* Valores apenas para exemplo =P


Alguém tem alguma idéia de como eu posso, se for possível, mostrar os valores desse array agrupados, como nesse exemplo?

* américa central
- brasil
-- Paulista
-- são paulo

* américa do sul
- argentina
-- hola


Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#2 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 14/12/2009, 17:17

Que tal?

foreach($array as $row) {
     $new[$row['continent']][$row['country']][$row['id']] = $row['name'];
}

print_r($new);

Será gerado um array assim:

Array
(
    [américa central] => Array
        (
            [brasil] => Array
                (
                    [0] => Paulista
                    [1] => são paulo
                )

        )

    [américa do sul] => Array
        (
            [argentina] => Array
                (
                    [2] => hola
                )

        )

)

Com 3 foreach nesse novo array você consegue fazer a listagem que você quer facilmente. Só não esqueça que Brasil está na América do Sul, não na América Central. :P

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#3 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 14/12/2009, 18:07

Valeu, 100.. Vou testar e ver o que posso fazer depois.

Pode deixar, isso é só um teste/exemplo. O Brasil está até na Oceania. :P
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#4 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 15/12/2009, 00:03

De onde vem esse array original? :rolleyes:

[]’sAté mais

#5 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 15/12/2009, 01:15

Falou comigo? :lol:

O $array original é o array do Alex. Eu não quis colocar ele de novo. :P
att,
Muller Dias
ex-administrador Fórum WMO

#6 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 15/12/2009, 02:12

Falou comigo? :lol:

O $array original é o array do Alex. Eu não quis colocar ele de novo. :P

Na verdade eu perguntei pro Alex. :D

O que eu vou dizer vai depender da resposta dele. :P

[]’sAté mais

#7 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 15/12/2009, 08:03

De um xml.
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#8 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 15/12/2009, 08:55

Ahhh, esquece... :assobio:

Bem, você vai precisar ordenar pelo continente, país e nome de qualquer jeito, certo? :ponder:

Dá pra fazer a modificação no próprio array (in-place) com a função usort():

<?php

// Fiz um exemplo melhor só para obter resultados concretos
$array = array(
    array(
        'id'        => 0,
        'continent' => 'América do Sul',
        'country'   => 'Brasil',
        'name'      => 'Rio de Janeiro'
    ),
    array(
        'id'        => 1,
        'continent' => 'América do Sul',
        'country'   => 'Brasil',
        'name'      => 'São Paulo'
    ),
    array(
        'id'        => 2,
        'continent' => 'América do Norte',
        'country'   => 'Estados Unidos',
        'name'      => 'Nova Iorque'
    )
);

foreach (array('continent', 'country', 'name') as $key) {
    usort($array, create_function('$a, $b', "return strcmp(\$a[$key], \$b[$key]);"));
}

print_r($array);

?>
Pode não ser uma solução elegante, mas enfim. :D

[]’sAté mais




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq