Ir al contenido


Foto

[Ayuda Arrays]Mostrar por id (primero y ultimo de esos id asociados)


  • Por favor identifícate para responder
2 respuestas en este tema

#1 yisus

yisus

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 26 diciembre 2014 - 10:23

Hola gente saludos espero me puedan ayudar con mi duda que es la siguiente.


Como haría yo para recorrer un arreglo y que al encontrar varias fechas con el mismo id asociado me gustaria mostrar la primera fecha encontrada y la ultima fecha asociada esos id , ya que no es necesario que muestra las otras fechas si no la primera y la ultima de ese id asociado.

Este es mi arreglo(Ejemplo):



delphi
  1. $array= array(
  2.           array(  "id"=>'1','Fecha'=>'12/12/2014'),
  3.           array( "id"=>'1','Fecha'=>'13/12/2014'),
  4.             array("id"=>'1','Fecha'=>'14/12/2014'),
  5.             array("id"=>'2','Fecha'=>'10/11/2014'),
  6.             array("id"=>'2','Fecha'=>'11/11/2014'),
  7.           array( "id"=>'2','Fecha'=>'12/11/2014'),
  8.           array( "id"=>'5','Fecha'=>'05/10/2014'),
  9.           array( "id"=>'5','Fecha'=>'06/11/2014'),
  10.           array( "id"=>'5','Fecha'=>'07/11/2014'),
  11.      
  12.         );


y este seria un print_r de ese arreglo :



delphi
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [id] => 1
  6.             [Fecha] => 12/12/2014
  7.         )
  8.  
  9.     [1] => Array
  10.         (
  11.             [id] => 1
  12.             [Fecha] => 13/12/2014
  13.         )
  14.  
  15.     [2] => Array
  16.         (
  17.             [id] => 1
  18.             [Fecha] => 14/12/2014
  19.         )
  20.  
  21.     [3] => Array
  22.         (
  23.             [id] => 2
  24.             [Fecha] => 10/11/2014
  25.         )
  26.  
  27.     [4] => Array
  28.         (
  29.             [id] => 2
  30.             [Fecha] => 11/11/2014
  31.         )
  32.  
  33.     [5] => Array
  34.         (
  35.             [id] => 2
  36.             [Fecha] => 12/11/2014
  37.         )
  38.  
  39.     [6] => Array
  40.         (
  41.             [id] => 5
  42.             [Fecha] => 05/10/2014
  43.         )
  44.  
  45.     [7] => Array
  46.         (
  47.             [id] => 5
  48.             [Fecha] => 06/11/2014
  49.         )
  50.  
  51.     [8] => Array
  52.         (
  53.             [id] => 5
  54.             [Fecha] => 07/11/2014
  55.         )
  56.  
  57. )



Y este seria un ejemplo de lo que quiero:



delphi
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [id] => 1
  6.             [FechaINICIAL] => 12/12/2014
  7.         )
  8.  
  9.     [1] => Array
  10.         (
  11.             [id] => 1
  12.             [FechaFINAL] => 14/12/2014
  13.         )
  14.  
  15.     [2] => Array
  16.         (
  17.             [id] => 2
  18.             [FechaINICIAL] => 10/11/2014
  19.         )
  20.  
  21.     [3] => Array
  22.         (
  23.             [id] => 2
  24.             [FechaFINAL] => 12/11/2014
  25.         )
  26.  
  27.     [4] => Array
  28.         (
  29.             [id] => 5
  30.             [FechaINICIAL] => 05/10/2014
  31.         )
  32.  
  33.     [5] => Array
  34.         (
  35.             [id] => 5
  36.             [FechaFINAL] => 07/11/2014
  37.         )
  38.  
  39. )



Saludos espero su ayuda (la verdad nunca me habia topado con tan dificultad en arreglos )
  • 0

#2 porfi.dev

porfi.dev

    Advanced Member

  • Miembros
  • PipPipPip
  • 183 mensajes
  • LocationMy House @ México

Escrito 29 diciembre 2014 - 10:31

(h) La verdad si hay métodos para hacer esto mucho más facil, pero en fin trate de crear un codigo visible.

Suponiendo que tu arreglo ya viene ORDENADO, es decir las fechas la primera es la inicial y la última es la final.



delphi
  1. $array = array(
  2.  
  3.     array("id" => '1', 'Fecha' => '12/12/2014'),
  4.     array("id" => '1', 'Fecha' => '13/12/2014'),
  5.     array("id" => '1', 'Fecha' => '14/12/2014'),
  6.     array("id" => '2', 'Fecha' => '10/11/2014'),
  7.     array("id" => '2', 'Fecha' => '11/11/2014'),
  8.     array("id" => '2', 'Fecha' => '12/11/2014'),
  9.     array("id" => '5', 'Fecha' => '05/10/2014'),
  10.     array("id" => '5', 'Fecha' => '06/11/2014'),
  11.     array("id" => '5', 'Fecha' => '07/11/2014')
  12. );



Primero hay que ordenarlo para agrupar los ID



delphi
  1. Ordenarlo
  2. $arrayToSort = array();
  3. foreach($array as $index){
  4.     $arrayToSort[$index["id"]]["id"] = $index["id"];
  5.     $arrayToSort[$index["id"]]["fechas"][] = $index["Fecha"];
  6. }
  7.  
  8. var_dump($arrayToSort);
  9.  



Este te arroja algo como:


delphi
  1. array (size=3)
  2.   1 =>
  3.     array (size=2)
  4.       'id' => string '1' (length=1)
  5.       'fechas' =>
  6.         array (size=3)
  7.           0 => string '12/12/2014' (length=10)
  8.           1 => string '13/12/2014' (length=10)
  9.           2 => string '14/12/2014' (length=10)
  10.   2 =>
  11.     array (size=2)
  12.       'id' => string '2' (length=1)
  13.       'fechas' =>
  14.         array (size=3)
  15.           0 => string '10/11/2014' (length=10)
  16.           1 => string '11/11/2014' (length=10)
  17.           2 => string '12/11/2014' (length=10)
  18.   5 =>
  19.     array (size=2)
  20.       'id' => string '5' (length=1)
  21.       'fechas' =>
  22.         array (size=3)
  23.           0 => string '05/10/2014' (length=10)
  24.           1 => string '06/11/2014' (length=10)
  25.           2 => string '07/11/2014' (length=10)



Esto ya es un poco más arreglado. Ahora vamos a crear un array donde solo tomamos la primera fecha (la inicial) y la ultima fecha (la final) para que tome la forma que más o menos quieres.



delphi
  1. Crear un array con los valores ordenados y legibles
  2. $finalArray = array();
  3. foreach($arrayToSort as $index){
  4.     $temp = array(
  5.         "id" => $index["id"],
  6.         "fechaInicial" =>  reset($index["fechas"]),
  7.         "fechaFinal" =>  end($index["fechas"])
  8.     );
  9.     $finalArray[] = $temp;
  10. }
  11.  
  12. var_dump ($finalArray);
  13.  



Esto ya te genera un tipo de código como:


delphi
  1. array (size=3)
  2.   0 =>
  3.     array (size=3)
  4.       'id' => string '1' (length=1)
  5.       'fechaInicial' => string '12/12/2014' (length=10)
  6.       'fechaFinal' => string '14/12/2014' (length=10)
  7.   1 =>
  8.     array (size=3)
  9.       'id' => string '2' (length=1)
  10.       'fechaInicial' => string '10/11/2014' (length=10)
  11.       'fechaFinal' => string '12/11/2014' (length=10)
  12.   2 =>
  13.     array (size=3)
  14.       'id' => string '5' (length=1)
  15.       'fechaInicial' => string '05/10/2014' (length=10)
  16.       'fechaFinal' => string '07/11/2014' (length=10)




Y ya es todo... recuerda dividir tu problema primero en partes pequeñas, despues ya cuando funcione buscas hacer un refactor para reducir el código basura.

Aquí el GIST que es el codigo del .php completo

https://gist.github....f2b44c15646ea64


Saludos desde elporfirio.com
  • 0

#3 yisus

yisus

    Newbie

  • Miembros
  • Pip
  • 5 mensajes

Escrito 29 diciembre 2014 - 05:42

Muchas gracias amigo la verdad he aprendido algo mas de arreglos asi tan complicados jejejeje incluso logre separarlos por fechas y calcule sus dias que luega eso tenia que multiplicarlos por unos montos algo loco jeejejejej, muchas gracias saludos.
  • 0




IP.Board spam blocked by CleanTalk.