Jump to content

Duvida ordenacao de array


fo_11
 Share

Recommended Posts

Tenho de ordenar um array mas não estou a conseguir. Vou perdendo informacao.

Aqui está o código que fiz. A ordenacao é feita por ordem crecente de habitantes.

<html>
<head></head>
<body>

<?php

$cidades=array('Lisboa','Porto','Santarém','Setúbal','Aveiro','Faro','Coimbra','Castelo Branco','Covilhã','Leiria');
$habitantes=array(489563,216080,28900,89303,55291,41307,101069,30649,34700,42745);


echo "<table border='0'>
 <tr>
    <td> <table>  
				<tr align='center'style='font-size:18'><th>Cidades</th><th>NºHabitantes</th></tr>";
					for($i=0;$i<10;$i++)   //escrver a informacao
					  echo "<tr ><td align='center'>$cidades[$i]</td><td align='right'>$habitantes[$i]</td></tr>";
					  
	echo"</table>
	</td>
	<td><table>
				<tr align='center style='font-size:18'><th>Cidades</th><th>Nº Habitantes</th></tr>";
for($i=0;$i<10;$i++)
  for($j=($i+1);$j<10;$j++)
    if($habitantes[$j]<$habitantes[$i])     //ordenação
   {$auxh=$habitamtes[$i];              //efectuar troca
    $auxc=$cidades[$i];
	$habitantes[$i]=$habitantes[$j];
	$cidades[$i]=$cidade[$j];
	$habitantes[$j]=$auxh;
	$cidades[$j]=$auxc;
   }	  
                    for($i=0;$i<10;$i++)
					  echo"<tr><td>$cidades[$i]</td><td>$habitantes[$i]</td></tr>";
		  
		  
	echo"</table>;"
?>
</body>
</html>	
Link to comment
Share on other sites

Primeiro combina em forma de array associativa ( array( $chave => $valor ) ), as duas arrays com que começaste. (array_combine)

Depois reordenas a array pelas chaves do maior para o menor. (krsort)

Assim já podes percorrer a array.

Podes clicar nas funções, no código, que te envia para o site do manual de PHP, que explica muito melhor que eu.

Link to comment
Share on other sites

Já consegui o que pretendia... Obrigado pela ajuda

EDIT:Temos Duas Tabelas uma sem ordenacao outra com ordenacao

<html>
<head></head>
<body>

<?php

$cidades=array('Lisboa','Porto','Santarém','Setúbal','Aveiro','Faro','Coimbra','Castelo Branco','Covilhã','Leiria');
$habitantes=array(489563,216080,28900,89303,55291,41307,101069,30649,34700,42745);


echo "<table border='0'>
 <tr>
    <td> <table>  
				<tr align='center'style='font-size:18'><th>Cidades</th><th>NºHabitantes</th></tr>";
					for($i=0;$i<10;$i++)   //escrver a informacao
					  echo "<tr ><td align='center'>$cidades[$i]</td><td align='right'>$habitantes[$i]</td></tr>";
					  
	echo"</table>
	</td>
	<td><table>
				<tr align='center style='font-size:18'><th>Cidades</th><th>Nº Habitantes</th></tr>";
				$habitantes_cidades = array_combine($habitantes,$cidades);//cria um array em que as $keys são o primeiro array, neste caso $habitantesm, e o segundo funciona como o array $values
				ksort(&$habitantes_cidades);           //ordena o array de forma crescente pelo key
				foreach($habitantes_cidades as $habitantes=>$cidades)   //faz a associacao da chave ao value para podermos escrever no ecrã
					  echo"<tr><td>$cidades</td><td>$habitantes</td></tr>";
		  
		  
	echo"</table>";
?>
</body>
</html>	

PS:Se nos comentários estiverem alguma barbaridade notifica...

Link to comment
Share on other sites

Objectivo apresentar três tabelas uma deesordenada, uma ordenada por numero de habitantes e outra por ordem alfabetica utilizando o nome das cidades

Aqui está o código para quem estiver a iniciar php e tiver dúvidas:

<html>
<head><title>TABELAS CIDADES/HABITANTES</title></head>
<body>

<?php

$cidades=array('Lisboa','Porto','Santarém','Setúbal','Aveiro','Faro','Coimbra','Castelo Branco','Covilhã','Leiria');
$habitantes=array(489563,216080,28900,89303,55291,41307,101069,30649,34700,42745);


echo "<table border='0' cellpadding='50'>
 <tr>
    <td> <table>  
				<tr align='center' style='font-size:20'><td colspan='2'>ENCONTRA-SE DESORDENADO</td></tr>
				<tr align='center'style='font-size:18'><th>Cidades</th><th>NºHabitantes</th></tr>";
					for($i=0;$i<10;$i++)   //escrever a informacao
					  echo "<tr ><td align='center'>$cidades[$i]</td><td align='right'>$habitantes[$i]</td></tr>";
					  
	echo"</table>
	</td>
	<td><table>
				<tr align='center' style='font-size:20'><td colspan='2'>ORDENADO CRESC. HABITANTES</td></tr>
				<tr align='center'style='font-size:18'><th>Cidades</th><th>Nº Habitantes</th></tr>";
				//temos e devemos usar sempre funçoes para evitar certos problemas
				function ordenarPorhabitantes($habitantes,$cidades){
				$habitantes_cidades = array_combine($habitantes,$cidades);//cria um array em que as $keys são o primeiro array, neste caso $habitantesm, e o segundo funciona como o array $values
				ksort(&$habitantes_cidades);           //ordena o array de forma crescente pelo key
				foreach($habitantes_cidades as $habitantes=>$cidades)   //faz a associacao da chave ao value para podermos escrever no ecrã
					   echo"<tr><td align='center'>$cidades</td><td align='right'>$habitantes</td></tr>";}
				ordenarPorhabitantes($habitantes,$cidades);//aqui é feita a chamada da funcao
		  
		  
	echo"</table>
	</td>
	<td><table>
			    <tr align='center' style='font-size:20'><td colspan='2'> ORDENADO CRESC. CIDADES<td></tr>
				<tr align='center' style='font-size:18'><th>Cidades</th><th>NºHabitantes</th>";

				//a explicação desta funçao é a mesma que a de cima mas o critério de ordenação é diferente 
				function ordenarPorCidade($habitantes,$cidades){
				$cidades_habitantes=array_combine($cidades,$habitantes);
				ksort(&$cidades_habitantes);
				foreach($cidades_habitantes as $cidades=>$habitantes)
				       echo"<tr align='center'><td>$cidades</td><td align='right'>$habitantes</td>";}
				ordenarPorCidade($habitantes,$cidades);
	echo"</table>
	</td>
	</tr></table>";

?>
</body>
</html>			  

Agradeço ao  Battousai pela dica  🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.