valor recorrer puede para ordenar multidimensional manejo llenar emplear elemento ejemplos buscar array_search array php sorting

recorrer - ordenar array multidimensional php



Ordenar matriz multi-dimensional de PHP basada en la clave? (6)

Esta pregunta ya tiene una respuesta aquí:

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''));



<?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; }