[PHP] Ordenando array

Levante a mão quem nunca fez a ordenação de uma array o/. Pois eh… hoje mesmo precisei realizar uma tarefa dessas e para a minha grande surpresa (e um tanto de “loirisse” da minha parte) achei uma tabela bem legal no PHP.net.

Simplificando, ficamos assim:

Função Ordena por Mantém a associação de chaves? Ordem de ordenação
asort() valor sim menor para maior
arsort() valor sim maior para menor
ksort() valor sim menor para maior
krsort() valor sim maior para menor
ksort() chave sim menor para maior
krsort() chave sim maior para menor
sort() valor não menor para maior
rsort() valor não maior para menor

Array

Hoje eu vou falar de um assunto que me deixou realmente muito irritada no escritório pelo fato de existir o Google e PHP Manual para pesqueisar e as pessoas não vão atrás! Isso me deixa muito irritada (para não falar outra coisa).

Vamos começar a brincadeira. Para criar um novo array é muito simples. Dúvidas?

<?php
	$frutas = array array("a"=>"laranja", "b"=>"banana", "c"=>"maçã");
	$numeros = array(1, 2, 3, 4, 5, 6);
?>

Ok. Coloquei os valores em um array. Vou colocar um exemplo de matriz:

<?php
	$sacolao = array (
						"frutas" => array("a"=>"laranja", "b"=>"banana", "c"=>"maçã"),
						"verduras" => array("a"=>"abobrinhas", "b"=>"beteraba","c" => "cenoura"),
					);
	);
?>

Simples não?
E agora eu quero ver como ficou os array. Para isso você tem duas formas de imprimir:
print_r

<?php
	print_r($sacolao);
	#Resultado: Array ( [frutas] => Array ( [a] => laranja [b] => banana [c] => maçã ) [verduras] => Array ( [a] => abobrinhas [b] => beteraba [c] => cenoura ) )
?>

– Ou var_dump:

<?php
	var_dump($sacolao);
	/*	Resultado:
		array
			'frutas' => 
				array
					'a' => string 'laranja' (length=7)
					'b' => string 'banana' (length=6)
					'c' => string 'maçã' (length=4)
			'verduras' => 
				array
					'a' => string 'abobrinhas' (length=10)
					'b' => string 'beteraba' (length=8)
					'c' => string 'cenoura' (length=7)
	*/
?>

Ok. Já colocamos os dados em um array e já imprimimos. Mas não é só isso que o array pode fazer. Vou colocar algumas funções de ordenação. A fim de facilitar a busca, coloco uma tabela comparativa:

Funções Ordenação Descrição
sort Crescente Ordena o array sem manter os índices
rsort Decrescente Ordena o array sem manter os índices
asort Crescente Ordena o array mantendo a associação do índice e valor
arsort Decrescente Ordena o array mantendo a associação do índice e valor
ksort Crescente Ordena um array pelas chaves
krsort Decrescente Ordena um array pelas chaves

Para demonstrar cada função, vou utilizar o array abaixo:

<?php
	$num = array(15 => 1, 21 => 1, 1 => 15, 5 => 30, 2 => 4);
	var_dump($num);
	/*
		Resultado:
			array
				15 => int 1
				21 => int 1
				1 => int 15
				5 => int 30
				2 => int 4
	*/
?>

sort: Ordena um array em ordem crescente sem manter os índices.

<?php
	sort($num,SORT_NUMERIC);
	var_dump($num);
	/*
		Resultado
				array
					0 => int 1
					1 => int 1
					2 => int 4
					3 => int 15
					4 => int 30
	*/
?>

rsort: Ordena um array em ordem descrescente sem manter os índices.

<?php
	rsort($num,SORT_NUMERIC);
	var_dump($num);
	/*
		Resultado
				array
					0 => int 30
					1 => int 15
					2 => int 4
					3 => int 1
					4 => int 1
	*/
?>

asort:Ordena um array mantendo a associação entre índices e valores.

<?php
	asort($num,SORT_NUMERIC);
	var_dump($num);
	/*
		Resultado
				array
					15 => int 1
					21 => int 1
					2 => int 4
					1 => int 15
					5 => int 30
	*/
?>

arsort: Ordena um array em ordem descrescente mantendo a associação entre índices e valores.

<?php
	arsort($num,SORT_NUMERIC);
	var_dump($num);
	/*
		Resultado
				array
					5 => int 30
					1 => int 15
					2 => int 4
					21 => int 1
					15 => int 1
	*/
?>

ksort: Ordena um array pelas chaves

<?php
	ksort($num,SORT_NUMERIC);
	var_dump($num);
	/*
		Resultado:
			array
				1 => int 15
				2 => int 4
				5 => int 30
				15 => int 1
				21 => int 1
	*/
?>

krsort: Ordena um array pelas chaves em ordem descrescente (é o contrário do ksort).

<?php
	krsort($num,SORT_NUMERIC);
	var_dump($num);
	/*
		Resultado:
			array
				21 => int 1
				15 => int 1
				5 => int 30
				2 => int 4
				1 => int 15
	*/
?>

Outras funções de muita utilidade:
array_unique: Remove o valores duplicados de um array

<?php
	var_dump(array_unique($num));
	/*
		Resultado:
			array
				15 => int 1
				1 => int 15
				5 => int 30
				2 => int 4
	*/
?>

shuffle: Mistura os elementos de um array de forma aleatória sem manter os índices.

<?php
	shuffle($num);
	var_dump($num);
	/*
		Resultado
				array
					0 => int 4
					1 => int 30
					2 => int 1
					3 => int 1
					4 => int 15
	*/
?>

range: Cria um array contendo uma faixa de elementos.

<?php
	$num = range(5,50,5);
	var_dump($num);
	/*
		Resultado:
			array
				0 => int 5
				1 => int 10
				2 => int 15
				3 => int 20
				4 => int 25
				5 => int 30
				6 => int 35
				7 => int 40
				8 => int 45
				9 => int 50
	*/
?>

<a href="http://php.net/manual/en/function.in-array.php" target="blank">in array: </a>Procura o elemento no array.

<?php
	$os = array("Mac", "NT", "Irix", "Linux");
	//Resultado: Got Irix
	if (in_array("Irix", $os)) {
		echo "Got Irix";
	}
	//Resultado: vazio
	if (in_array("mac", $os)) {
		echo "Got mac";
	}
?>

count: Conta o número de elementos de uma variável, ou propriedades de um objeto.

<?php
	$os = array("Mac", "NT", "Irix", "Linux");
	echo count($os);
	//Resultado: 4
?>

array_count_values: Conta as frequências de cada valor de um array

<?php
	$array = array(1, "ola", 1, "mundo", "ola");
	$resultado = array_count_values($array);
	var_dump($resultado);
	/*
		Resultado: 
			array
				1 => int 2
				'ola' => int 2
				'mundo' => int 1
	*/
?>

array_multisort: Ordena múltiplos arrays ou arrays multidimensionais.

<?php
	$ar1 = array(10, 100, 100, 0);
	$ar2 = array(1, 3, 2, 4);
	array_multisort($ar1, $ar2);

	var_dump($ar1);
	var_dump($ar2);
	/*
		Resultado:
			array
				0 => int 0
				1 => int 10
				2 => int 100
				3 => int 100
			array
				0 => int 4
				1 => int 1
				2 => int 2
				3 => int 3
	*/
?>

Existem outras funções no PHP Manual.