por - Ordenar una matriz asociativa en PHP
sort array php (6)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo puedo ordenar matrices y datos en PHP? 8 respuestas
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);
?>
Esto podría ayudar: ordenar matrices de matrices
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;