recorrer - ordenar array multidimensional php
Ordenar matriz multi-dimensional de PHP basada en la clave? (6)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo puedo ordenar matrices y datos en PHP? 8 respuestas
Estoy tratando de ordenar mi hash PHP basado en una clave específica. La estructura de datos se ve así:
print_r($mydata);
Array(
[0] => Array
(
[type] => suite
[name] => A-Name
)
[1] => Array
(
[type] => suite
[name] => C-Name
)
[2] => Array
(
[type] => suite
[name] => B-Name
)
)
He intentado ksort , sort , usort pero nada parece funcionar. Intento ordenar según la clave de nombre de dos niveles hacia abajo.
Este fue mi intento de usar usort:
function cmp($a, $b) {
return $b[''name''] - $a[''name''];
}
usort($mydata, "cmp");
¿Hay alguna manera fácil de hacerlo o necesito escribir una función de clasificación personalizada?
Pensamiento, más útil y práctico http://php.net/manual/en/function.sort.php
function array_sort($array, $on, $order=SORT_ASC){
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}
switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array;
}
Cómo utilizar
$list = array(
array( ''type'' => ''suite'', ''name''=>''A-Name''),
array( ''type'' => ''suite'', ''name''=>''C-Name''),
array( ''type'' => ''suite'', ''name''=>''B-Name'')
);
$list = array_sort($list, ''name'', SORT_ASC);
array(3) { [0]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "A-Name" } [2]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "B-Name" } [1]=> array(2) { ["type"]=> string(5) "suite" ["name"]=> string(6) "C-Name" } }
Prueba este modo recursivo, que utilicé en la API REST de Magento:
$parameters = [''searchCriteria'' => [''currentPage'' => 1, ''pageSize'' => 20]];
$parameters[''searchCriteria''][''filter_groups''][0][''filters''][0] = [''condition_type'' => ''from'', ''field'' => ''updated_at'', ''value'' => ''2017-01-01T00:00:00''];
$parameters[''searchCriteria''][''filter_groups''][1][''filters''][0] = [''condition_type'' => ''to'', ''field'' => ''updated_at'', ''value'' => ''2017-12-31T23:59:59''];
function sortArrayByKeyAsc($_params){
if(is_array($_params)){
uksort($_params, ''strnatcmp'');
foreach ($_params as $key => $value){
if(is_array($value)){
$_params[$key] = sortArrayByKeyAsc($value);
}
}
}
return $_params;
}
Pruebe esta función de usort:
function cmp($a, $b){
if ($a == $b)
return 0;
return ($a[''name''] < $b[''name'']) ? -1 : 1;
}
$my_array = array(
0 => array
(
''type'' => ''suite''
,''name'' => ''A-Name''
)
,1 => array
(
''type'' => ''suite''
,''name'' => ''C-Name''
)
,2 => array
(
''type'' => ''suite''
,''name'' => ''B-Name''
)
);
usort($my_array, "cmp");
Si lo usa en una clase, el segundo parámetro cambia a una matriz como esta:
usort($my_array, array($this,''cmp''));
array_multisort() - Ordenar matrices múltiples o multidimensionales
<?php
$a=array(
array(''a''=>5,''b''=>7),array(''c''=>4,''d''=>2),array(''e''=>0,''f''=>12)
);
function cmp_sort($x,$y){ //your function to compare two keys
if($x===$y)
return 0;
else
return ($x<$y?1:-1);
}
uasort($a,''cmp_sort''); //call user-defined compare function
print_r($a); //printing the sorted array
?>
Salida =>
Matriz ([2] => Matriz ([e] => 0 [f] => 12) [1] => Matriz ([c] => 4 [d] => 2) [0] => Matriz ([ a] => 5 [b] => 7))
$this->aasort($array,"key");
function aasort (&$array, $key) {
$sorter=array();
$ret=array();
reset($array);
foreach ($array as $ii => $va) {
$sorter[]=$va[$key];
}
arsort($sorter);
foreach ($sorter as $ii => $va) {
$ret[]=$array[$ii];
}
return $array=$ret;
}