Jump to content
Sign in to follow this  
fo_11

Duvida ordenacao de array

Recommended Posts

fo_11

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>	

 

Share this post


Link to post
Share on other sites
Battousai

E porque não descomplicar?

$habitantes_cidades = array_combine($habitantes, $cidades);
krsort($habitantes_cidades);


foreach($habitantes_cidades as $habitantes => $cidade){
...
}

Actualizado, esqueci-me que a array é passada por ref.

Share this post


Link to post
Share on other sites
Battousai

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.

Share this post


Link to post
Share on other sites
fo_11

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...

Share this post


Link to post
Share on other sites
fo_11

Surgiu me um novo problema.

Agora quero ordenar  alfabeticamente as cidades mas a funcao que me indicas-te trasforma os array em srtings e inteiros.

Como faço para resolver o problema?

Share this post


Link to post
Share on other sites
fo_11

Problema resolvido... Utilizei funcoes para ultrapassar o problema.

Daqui a pouco já coloco o código fonte para quem estiver interessado.

Share this post


Link to post
Share on other sites
fo_11

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  :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • 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.