PHP - Ordenas numeros alfanumericamente

   
Vista:
Imágen de perfil de OMAR JORDAN

Ordenas numeros alfanumericamente

Publicado por OMAR JORDAN (3 intervenciones) el 03/12/2017 19:30:07
1
2
3
4
5
6
7
8
9
10
public function getALL ()
{
	$cve_categoria = $_POST['cve_categoria'];
	$resp = $this->conexionBD->preparar("SELECT cve_carrera, cve_categoria, cve_indicador, indicador, registro_indic
			FROM cat_indicadores WHERE cve_categoria = '$cve_categoria' ORDER BY cve_indicador ASC");
	$resp->ejecutar();
 
	$resultado = $resp->getMatriz();
	return $resultado;
}

Este codigo al inicio recupera por el metodo POST la cve_categoría la cual como resultado mostrará todos los cve_indicador que pertenecen a el, los manda correctamente mi duda es que me muestra los resultados asi:

1.1 A
1.10 A
1.11 A
1.2 A
1.3 A
Y así sucesivamente

Quisiera que me los ordené así:
1.1 A
1.2 A
1.3 A
.
.
.
1.10 A
1.11 A

Ya le busque por muchas formas en el ORDER BY pero sin exito sigue igual
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de facundo

Ordenas numeros alfanumericamente

Publicado por facundo (185 intervenciones) el 03/12/2017 20:48:36
Hola,

Si en la database tenes el campo num y en otro campo tenes guardado letra entonces podes guardar los valores en un array distinto para cada uno.

entonces si tenes array1 y array2 los podes iterar ordenandolos de mayor a menos o viceversa tambien. Aunque seria mejor ponerlo en un solo array los dos valores A 1.0 y ahi los mostras en una tabla o acomodados con css para que este uno al lado del otro

http://php.net/manual/es/array.sorting.php


Si podes postea valor de retorno de la funcion getAll para que se mas facil responderte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de OMAR JORDAN

Ordenas numeros alfanumericamente

Publicado por OMAR JORDAN (3 intervenciones) el 03/12/2017 21:22:45
No tengo dos campos en mi tabla es uno que lo nombre cve_indicador
indicador

Te comentó que los devuelve bien solamente el error es cuando ahi un 1.10A me lo coloca abajo del 1.1A
SIAC
Esto devuelve la funcion getAll
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de facundo

Ordenas numeros alfanumericamente

Publicado por facundo (185 intervenciones) el 03/12/2017 22:20:42
Capas te lo tome como "4.1" que es lo mismo que "4.10" o que "4.100",etc. Proba poniendole coma a todos y no puntos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de OMAR JORDAN

Ordenas numeros alfanumericamente

Publicado por OMAR JORDAN (3 intervenciones) el 03/12/2017 23:44:16
Mmmmm no me sirve con coma debe llevar forzosamente (punto).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ordenas numeros alfanumericamente

Publicado por preguntas (20 intervenciones) el 04/12/2017 00:28:47
Te da esos resultados por que esta tomando los valores como decimales. Entonces: 4.10 es menor que 4.2.

Lo mas rápido que se me ocurre es modificar un poco la estructura de tus datos, transformarlos a entero, ordenarlos y dejarlos como estaba al principio pero ahora ordenados. No se si entendió, bueno...Esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 
$tabla = [
    '4.1 A',
    '4.3 A',
    '4.2 A',
    '4.11 A',
    '4.10 A',
];
 
$tabla_ordenada = $tabla;
 
$tmp = '';
 
for($i = 0; $i < count($tabla_ordenada) - 1; $i++)
{
	for($j = 0; $j < count($tabla_ordenada) - 1; $j++)
	{
		$numero_a = str_replace('.', '', explode(' ', $tabla_ordenada[$j])[0]);
		$numero_b = str_replace('.', '', explode(' ', $tabla_ordenada[$j+1])[0]);
 
		if (intval($numero_a) > intval($numero_b))
		{
			$tmp = $tabla_ordenada[$j+1];
			$tabla_ordenada[$j+1] = $tabla_ordenada[$j];
			$tabla_ordenada[$j] = $tmp;
		}
	}
}
 
foreach($tabla_ordenada as $registro){
    echo $registro."\n";
}

http://sandbox.onlinephpfunctions.com/code/3980da0ef307967a68984e224c828c62bcb7cf00
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

Ordenas numeros alfanumericamente

Publicado por kip (861 intervenciones) el 04/12/2017 19:51:53
Hola, podrias hacerlo simple con natsort() que ordena los elementos de un array de forma natural, usando la matriz siguiente(tomado del ejemplo de arriba) seria asi:

1
2
3
4
5
6
7
8
9
10
11
$tabla = [
    '4.1 A',
    '4.3 A',
    '4.2 A',
    '4.11 A',
    '4.10 A',
];
 
natsort($tabla);
 
print_r($tabla);

Muestra:

1
2
3
4
5
6
7
8
Array
(
    [0] => 4.1 A
    [2] => 4.2 A
    [1] => 4.3 A
    [4] => 4.10 A
    [3] => 4.11 A
)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar