sort por ordenar objetos multidimensional fecha asociativo array php arrays sorting

por - Ordenar una matriz asociativa en PHP



sort array php (6)

Esta pregunta ya tiene una respuesta aquí:

Tengo una matriz en este formato:

Array ( [0] => Array ( [text] => tests [language] => [advertiserCompetitionScale] => 5 [avgSearchVolume] => 7480000 [lastMonthSearchVolume] => 9140000 ) [1] => Array ( [text] => personality tests [language] => [advertiserCompetitionScale] => 5 [avgSearchVolume] => 165000 [lastMonthSearchVolume] => 201000 ) [2] => Array ( [text] => online tests [language] => [advertiserCompetitionScale] => 5 [avgSearchVolume] => 246000 [lastMonthSearchVolume] => 301000 ) )

¿Cómo puedo ordenar una matriz en ese formato, en el orden descendente del campo avgSearchVolume ? ¿Hay una función incorporada para esto?


Aquí hay otra solución. Puede agregar múltiples opciones para ordenar (vea la sección comentada del código)

<?php $arr=Array( Array("text" => "tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 7480000,"lastMonthSearchVolume" => 9140000), Array("text" => "personality tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 165000,"lastMonthSearchVolume"=>201000), Array("text" => "online tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 246000,"lastMonthSearchVolume" =>301000) ); $sort = array(); foreach($arr as $k=>$v) { $sort[''avgSearchVolume''][$k] = $v[''avgSearchVolume'']; //$sort[''text''][$k] = $v[''text'']; } array_multisort($sort[''avgSearchVolume''], SORT_DESC, $arr); //array_multisort($sort[''avgSearchVolume''], SORT_DESC, $sort[''text''], SORT_ASC,$arr); echo "<pre>"; print_r($arr); ?>

REF: http://php.net/manual/en/function.array-multisort.php



Hasta PHP 5.3, esta es la mejor función para ordenar basada en subclaves sin hacer una nueva función para cada tecla.

function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) { foreach ($array as $subarray) { $keys[] = $subarray[$subkey]; } array_multisort($keys, $sortType, $array); } sortBySubkey($arr, ''avgSearchVolume'');

Con PHP 5.3 puede hacer algo como esto, la misma llamada de función que ahora.

function getSortVariable($sortType = SORT_ASC) { switch($sortType) { case SORT_ASC: return function ($a, $b) use ($subkey) { return strcmp($a[$subkey], $b[$subkey]); }; } } function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) { $sortFunction = getSortVariable($sortType); usort($array, $sortFunction($subkey)); }


Tendrá que usar una función de devolución de llamada personalizada junto con usort() .

function cmp($a, $b) { if ($a[''avgSearchVolume''] == $b[''avgSearchVolume'']) { return 0; } return ($a[''avgSearchVolume''] > $b[''avgSearchVolume'']) ? -1 : 1; } usort($array, ''cmp'');


Utilice la usort y suministre su propia función para hacer el pedido, por ejemplo

function cmp($a, $b) { return $b[''avgSearchVolume''] - $a[''avgSearchVolume'']; } usort($array, "cmp");


function querySort ($first_Array,$second_Array) { return strcasecmp($first_Array[''name''],$second_Array[''name'']); } echo ''<pre>''; usort($main, ''querySort''); print_r($main); die;