Foros del Web » Programando para Internet » PHP »

como funciona usort

Estas en el tema de como funciona usort en el foro de PHP en Foros del Web. Hola gente , llevo algún tiempo trabajando con php , pero repasando cosillas no dejo de sorprenderme ya que he encontrado este ejemplo de una ...
  #1 (permalink)  
Antiguo 25/10/2010, 16:35
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
como funciona usort

Hola gente , llevo algún tiempo trabajando con php , pero repasando cosillas no dejo de sorprenderme ya que he encontrado este ejemplo de una función llamada usort de PHP que no entiendo muy bien:

Código:
<?php
function ordenar($elem_1, $elem_2){
	if($elem_1 == $elem_2) return 0;
	
	if(($elem_1 > $elem_2)){
		return 1;
	} else {
		return -1;
	}
}
$matriz = array("4","55","44","556","2","43");
usort($matriz, "ordenar");
?>
He hecho los deberes antes de preguntar y he buscado info en php.net y en más sitios como de donde saqué el ejemplo .
Lo que no entiendo muy bien es como trabaja ya no la función usort sino más bien esta con ordenar (la función que compara ). Se que usort pasa como parámetros la matriz y una función pero no entiendo del todo que equivale a $elem_1 y a $elem_2, porque si va por orden ¿ elem_1 sería 4 y elem2 sería 55?, ¿como funciona esto?.

Mil gracias por la aclaración
__________________
Videotutoriales de Drupal
  #2 (permalink)  
Antiguo 25/10/2010, 17:16
 
Fecha de Ingreso: octubre-2010
Mensajes: 19
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: como funciona usort

Hola,

Por lo que yo he entendido, hemos de partir de la base de que para ordenar una lista de elementos la base sería una evaluación de dos elementos, a resultas de la cual, un elemento(el primero) avance(1), retroceda(-1) o se quede dónde está(0) respecto del segundo.

Y partiendo de esta base php lo que hace es ir comparando:

1er elemento con segundo y posiciona
2ndo con tercero y posiciona
y asi hasta llegar al final.

Por ejemplo este código es un ejemplo para ordenar un array poniendo primero los elementos pares y luego los impares:

Código HTML:
<?php
function cmp($a, $b)
{
	// si la suma de dos elementos da un numero par
	// es porque los dos son pares o los dos son impares
	// con lo cual no han de avanzar 
	// ya que nuestro criterio de ordenación 
	// es que la paridad sea distinta
    if (($a + $b) % 2 ==0)
	{
        return 0;
    }
	// si tienen paridad distinta
	// (esto lo sabemos porque su suma no da un numero par)
	// si el primero es par lo ponemos hacia la izquierda
	elseif(($a%2)==0)
	{
		return -1;
	}
	// el unico caso que queda es que el primero sea impar
	// lo ponemos a la derecha
	else
	{
		return 1;
	}

   

}

$a = array(3, 2, 5, 6, 1, 7 , 8, 11, 12, 45, 34, 67,86, 76, 43, 44, 98, 340);
foreach ($a as $key => $value) 
{
    echo "$value\n";
}
usort($a, "cmp");
?>
<br />
<?
foreach ($a as $key => $value) 
{
    echo "$value\n";
}
?>
No sé si me he explicado bien, pero eso es lo que yo he entendido.

Un saludo.
  #3 (permalink)  
Antiguo 26/10/2010, 00:34
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: como funciona usort

Cita:
Iniciado por yoseman1 Ver Mensaje
Hola,

Por lo que yo he entendido, hemos de partir de la base de que para ordenar una lista de elementos la base sería una evaluación de dos elementos, a resultas de la cual, un elemento(el primero) avance(1), retroceda(-1) o se quede dónde está(0) respecto del segundo.

Y partiendo de esta base php lo que hace es ir comparando:

1er elemento con segundo y posiciona
2ndo con tercero y posiciona
y asi hasta llegar al final.

Por ejemplo este código es un ejemplo para ordenar un array poniendo primero los elementos pares y luego los impares:
.
Gracias compañero , si es como tu dices la verdad que tiene mucho sentido, pero en ningún sitio donde he leído la explicacion de usort junto con una función, explica que trabaje de ese modo, igual es porque se sobrentiende , pero yo la verdad que no sabía que se podía trabajar de ese modo .
Mil gracias
__________________
Videotutoriales de Drupal

Etiquetas: Ninguno
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 23:55.