Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/12/2014, 08:41
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Ordenar array por tipo de dato

Hola gente vengo con un problema que encuentro una solución que me convenza, bah, si me convence, lo que no me convence es el manual de PHP.

<-- Inicio preámbulo, es solo para entrar en tema, podes saltearte lo que esta en verde -->

El problema es el siguiente, estoy haciendo un micro-motor de plantillas, algunas plantillas por ejemplo las de comentarios y respuestas son recursivas ya que las respuestas se van anidando.

Como no quiero usar recursividad para resolver el problema porque no se me antoja, lo estoy haciendo iterativo.

El algoritmo recibe el texto de template y un array multidimensional con los valores que tiene que reemplazar en el texto.

El problema que tengo, es que para que la rutina iterativa funcione igual que una recursiva, necesito procesar primero los valores que sean arrays antes que los que sean string o numéricos.


Supongamos que tengo el siguiente array de parámetros:
Código PHP:
Ver original
  1. $array = [
  2.     "texto" => "string",
  3.     "numero" => 22,
  4.     "arreglo" => ["datos", "datos", "mas datos"],
  5.     "arreglo_vacio" => []
  6. ];

Lo que quiero es que al principio estén los arrays y luego el resto de las variables mundanas, mantener las claves es importante.

Si uso la función rsort así:

Código PHP:
Ver original
  1. rsort($array);
  2. var_dump($array);

obtengo:
Código:
array (size=4)
  0 => 
    array (size=3)
      0 => string 'datos' (length=5)
      1 => string 'datos' (length=5)
      2 => string 'mas datos' (length=9)
  1 => 
    array (size=0)
      empty
  2 => int 22
  3 => string 'string' (length=6) 
Que en principio estaría bien.

El manual de rsort me dice que mire el manual de sort que son iguales.
El problema es que mirando el manual de sort me encontré con que:
Cita:
Advertencia:
Se ha de tener cuidado cuando se ordenen arrays con valores de tipos mixtos ya que sort() puede producir resultados impredecibles.


No me queda claro, ¿Cuidado con que? ¿Que significa "impredecible"? ¿Que puede venir en cualquier orden? ¿Que pude lanzar excepciones? ¿Que explota todo? ¿Que a mi mama le van mandar mas promociones los de la telefónica?

El caso es que me es imprescindible que siempre estén primero los arrays, no puedo dejar eso a la suerte.

La otra opción que se me ocurre es usar uasort asi:
Código PHP:
Ver original
  1. uasort($array, "is_array");
Pero esto es mas lento y costoso que rsort.

¿Alguna idea?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 24/12/2014 a las 16:10