Foros del Web » Programando para Internet » PHP »

ordenar una matriz

Estas en el tema de ordenar una matriz en el foro de PHP en Foros del Web. hola gente tengo el siguiente problema con el orden de una matriz, que tiene como contenido $m = array("2.2.2.1","2.2.2.11","2.2.2.10","2.2.2.2","2 .2.2.3"); sort($m); reset($m); print_r($m); esto da ...
  #1 (permalink)  
Antiguo 07/02/2007, 11:53
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 18 años, 11 meses
Puntos: 1
ordenar una matriz

hola gente
tengo el siguiente problema con el orden de una matriz, que tiene como contenido


$m = array("2.2.2.1","2.2.2.11","2.2.2.10","2.2.2.2","2 .2.2.3");
sort($m);
reset($m);

print_r($m);

esto da como resultado el siguiente orden:

2.2.2.1
2.2.2.10
2.2.2.11
2.2.2.2
2.2.2.3

pero necesito si o si que queden en este orden:


2.2.2.1
2.2.2.2
2.2.2.3
2.2.2.10
2.2.2.11

el siguiente array se ordena correctamente, pero no me sirve de esta manera:

$m = array( "2.2.2.01", "2.2.2.10", "2.2.2.11", "2.2.2.02", "2.2.2.03") ;

también me vale si se ordenan en una consulta sql

sql = "SELECT * FROM categorias WHERE cat_cod like '$id%' ORDER BY cat_cod";

desde ya muchas gracias.

Última edición por deet; 07/02/2007 a las 12:00
  #2 (permalink)  
Antiguo 07/02/2007, 12:23
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: ordenar una matriz

Me equivoqué

Última edición por Panino5001; 07/02/2007 a las 12:28
  #3 (permalink)  
Antiguo 07/02/2007, 15:24
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: ordenar una matriz

Fijate si te sirve así:
Código PHP:
<?php
function pp(&$n){
for(
$i=0;$i<count($n);$i++){
$m[$n[$i]]=array_sum(explode('.',$n[$i]));
}
asort ($m);
$narray_keys($m);
}
$m = array("2.2.2.1","2.2.2.11","2.2.2.10","2.2.2.2","2.2.2.3");
pp($m);
echo 
'<pre>';
print_r($m);
echo 
'</pre>';
?>

Última edición por Panino5001; 07/02/2007 a las 15:43
  #4 (permalink)  
Antiguo 07/02/2007, 15:34
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: ordenar una matriz

Código PHP:

<?php 
function pp(&$n){ 
for(
$i=0;$i<count($n);$i++){ 
$m[$n[$i]]=array_sum(explode('.',$n[$i])); 

asort ($m); 
$narray_keys($m); 

$m = array("2.2.2.1","2.2.2.11","2.2.2.10","2.2.2.2","2.2.2.3"); 
pp($m); 
echo 
'<pre>'
print_r($m); 
echo 
'</pre>'
?>
gracias pinino5001, esta perfecta esta función, muchas gracias.
  #5 (permalink)  
Antiguo 07/02/2007, 15:45
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: ordenar una matriz

Me alegra que te sirva, además vi que corregiste el error en la declaración y en el llamado por el tema de las referencias.
  #6 (permalink)  
Antiguo 07/11/2007, 15:44
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: ordenar una matriz

La funcion lamentablemente esta mal (creo) porque si se tiene

$m = array("2.2.2.1","2.2.2.11","2.2.2.10","2.2.2.2","2 .2.2.3", "5.2.2.3"); ???

Estimo que quedara mal ordenada...... es un sistema de jerarquias ese 5 tiene que valer mas por estar primero.

Me encontre con este mismo problema......y estoy buscando la solucion
  #7 (permalink)  
Antiguo 07/11/2007, 15:48
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Re: ordenar una matriz

Lo correcto seria esto:

function pp(&$n){

for($i=0;$i<count($n);$i++){
$m[$n[$i]]=peso($n[$i]);
}

asort ($m);
$n= array_keys($m);
}

donde .....


Código PHP:
Function peso ($c){
$cs explode("."$c); // separo (split) en sub-cadenas con el separador "."
$cuenta count ($cs); 

 
$d=1$temp 0
for (
$i $cuenta -$i >= 1$i--) {
 
$d $d 10
 
$temp $temp $cs[$i] *$d;
 
//echo $temp.$p; 
}
return (
$temp); 

O sea... ordeno por peso
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:00.