2012-01-31 16 views
11

. Tengo matriz de dosCombina dos matrices y ordena esta nueva matriz por fecha

Primera Uno

Array 
    (
     [0] => Array 
      (
       [date] => 2012-01-10 
       [result] => 65 
       [name] => Les océans 
      ) 

     [1] => Array 
      (
       [date] => 2012-01-11 
       [result] => 75 
       [name] => Les mers 
      ) 

     [2] => Array 
      (
       [date] => 2012-01-13 
       [result] => 66 
       [name] => Les continents 
       [type] => Scores 
      ) 

    ) 

El segundo

Array 
(
    [0] => Array 
     (
      [date_end] => 2012-01-12 
      [result] => 60 
      [name] => Step#1 
      [type] => Summary 
     ) 

) 

Y yo quiero esto para mi resultado final

Array 
     (
      [0] => Array 
       (
        [date] => 2012-01-10 
        [result] => 65 
        [name] => Les océans 
       ) 

      [1] => Array 
       (
        [date] => 2012-01-11 
        [result] => 75 
        [name] => Les mers 
       ) 

      [2] => Array 
      (
       [date_end] => 2012-01-12 
       [result] => 60 
       [name] => Step#1 
       [type] => Summary 
      ) 

      [3] => Array 
       (
        [date] => 2012-01-13 
        [result] => 66 
        [name] => Les continents 
        [type] => Scores 
       ) 

     ) 

Así que .... yo tenga que combinar ¡Mi primer arreglo con el segundo y quiero ordenar este nuevo arreglo por fecha! ... ¿Alguien puede ayudarme insinuando que hago esto? Gracias !

+0

Necesitas hacer 'JOIN' cuando se selecciona esto desde DB – dfsq

+3

@dfsq Estás asumiendo que hay una base de datos. – Crashspeeder

+0

Estoy bastante seguro de que esto es. Y si es así, OP ha elegido un enfoque equivocado. – dfsq

Respuesta

16

array_merge y usort es su amigo.

function cmp($a, $b){ 
    $ad = strtotime($a['date']); 
    $bd = strtotime($b['date']); 
    return ($ad-$bd); 
} 
$arr = array_merge($array1, $array2); 
usort($arr, 'cmp'); 
+0

como nota al margen Sugiero leer la documentación de usort php (los enlaces de respuesta a ella), hace las cosas mucho más fáciles de entender. Especialmente el retorno aparentemente misterioso ($ ad- $ db) y usort ($ arr, 'cmp'); –

+0

Hice una pregunta relacionada con este http://stackoverflow.com/questions/39243553/how-does-this-usort-cmp-function-actually-work ¿Podría ayudarnos? –

+1

Puede ser que haya visto su pregunta demasiado tarde. Afortunadamente ya hay una buena respuesta a tu pregunta. –

2

Utilice array_merge() para combinar las matrices, y luego use sort para ordenarlas() para ordenarlas, muy simple. ¿Te gustaría un ejemplo?

Esto debería solucionar el problema para usted:

function dateSort($a,$b){ 
    $dateA = strtotime($a['date']); 
    $dateB = strtotime($b['date']); 
    return ($dateA-$dateB); 
} 

$arrayOne = array(
    array(
     'date'  => '2012-01-10', 
     'result ' => 65, 
     'name'  => 'Les océans' 
    ), 
    array(
     'date'  => '2012-01-11', 
     'result ' => 75, 
     'name'  => 'Les mers' 
    ), 
    array(
     'date'  => '2012-01-13', 
     'result ' => 66, 
     'name'  => 'Les continents', 
     'type'  => 'Scores' 
    ) 
); 

$arrayTwo = array(
    array(
     'date'  => '2012-01-12', 
     'result ' => 60, 
     'name'  => 'Step#1', 
     'type'  => 'Summary' 
    ) 
); 

// Merge the arrays 
$combinedArray = array_merge($arrayOne,$arrayTwo); 

// Sort the array using the call back function 
usort($combinedArray, 'dateSort'); 
+0

Sí, por favor, eso será apreciado – user1029834

+0

Te contactaremos en un minuto –

+0

¿Necesitas almacenar la fecha como fecha, o puedes simplemente usar una marca de tiempo? A continuación, puede convertir la marca de tiempo en una fecha si es necesario. Solo pregunto porque hace que sea un poco más fácil de clasificar. –

1

array_merge sus matrices y luego usar el siguiente código como un ejemplo de cómo se puede solucionar el problema.

function sortDate($val1, $val2) 
{ 
    if ($val1['date'] == $val2['date']) { 
     return 0; 
    } 

    return (strtotime($val1['date']) < strtotime($val2['date'])) ? -1 : 1; 
} 

$array = array(
    array('date' => '2012-01-10'), 
    array('date' => '2011-01-10'), 
    array('date' => '2012-01-01') 
); 

usort($array, "sortDate"); 
print_r($array); 
Cuestiones relacionadas