Ordenar matriz multidimensional en PHP según una parte de una matriz

Tengo la siguiente matriz:

items = array(
        'note' => array(),
        'text' => array(),
        'year' => array()
        )

Así que tengo:

[note] => Array
(
   [0] => 'note1'
   [1] => 'note2'
   [2] => 'note3'
), 
[text] => Array
(
   [0] => 'text1'
   [1] => 'text2'
   [2] => 'test3'
), 
[year] => Array
(
   [0] => '2002'
   [1] => '2000'
   [2] => '2011'
)

Y me gustaría organizar las matrices anteriores por año. pero al mover elementos, me gustaría mover los elementos correspondientes en otras matrices (nota, texto).

Por ejemplo:

[note] => Array
(
   [2] => 'note3'
   [0] => 'note1'
   [1] => 'note2'
), 
[text] => Array
(
   [2] => 'text3'
   [0] => 'text1'
   [1] => 'test2'
), 
[year] => Array
(
   [2] => '2011'
   [0] => '2002'
   [1] => '2000'
)

preguntado el 12 de junio de 12 a las 10:06

2 Respuestas

Primero extraería la parte del año y la ordenaría por valor, manteniendo la clave, usando arsort ():

$yearData = $array['year'];
arsort($yearData);//sort high-to-low by value, while maintain it's key.

Finalmente, ordene los datos usando este año recién ordenado:

$newArray['note'] = array();
$newArray['text'] = array();
$newArray['year'] = array();

foreach($yearData as $key => $value){
    $newArray['note'][$key] = $array['note'][$key];
    $newArray['text'][$key] = $array['text'][$key];
    $newArray['year'][$key] = $array['year'][$key];
}

FYI, hay un montón de funciones que se ocupan de ordenar matrices en PHP.

Respondido el 12 de junio de 12 a las 11:06

Creo que una mejor organización para su matriz sería algo como esto:

[0] => Array(
    'note' => note1, 'text' => 'text1', 'year' => '2002)
[1] => Array(
    'note' => note2, 'text' => 'text2', 'year' => '2000)
[2] => Array(
    'note' => note3, 'text' => 'text4', 'year' => '2011)

De esta forma, cada elemento relacionado permanece unido y es más fácil ordenarlos por el tipo deseado.

$items = array(
    array(
        'note' => value,
        'text' => value,
        'year' => value
        ),
    array(
        'note' => value,
        'text' => value,
        'year' => value
        )
    )

Respondido 18 ago 15, 18:08

Sí, lo sé, pero desafortunadamente no puedo cambiar toda la estructura. - glarkou

Lo vi venir: P Bueno, ¡la respuesta de @ariefbayu lo resolverá por ti! - eduardo ruso

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.