clasificar una matriz por valor de subarrray en php
ordenar estructuras de datos es una tarea de programación común, y las matrices se usan con frecuencia para almacenar y administrar las recopilaciones de información. En PHP, las matrices pueden contener estructuras anidadas, incluidas las matrices como valores. La clasificación de las matrices multidimensionales puede ser útil por varias razones, como organizar datos o extraer elementos específicos.
Declaración del problema:
Considere la siguiente estructura de matriz:
$array = [ [ 'configuration_id' => 10, 'id' => 1, 'optionNumber' => 3, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 9, 'id' => 1, 'optionNumber' => 2, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 8, 'id' => 1, 'optionNumber' => 1, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], ];
el objetivo es ordenar esta matriz de manera incremental basada en la tecla 'OppectionNumber', dando como resultado la siguiente:
$sortedArray = [ [ 'configuration_id' => 8, 'id' => 1, 'optionNumber' => 1, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 9, 'id' => 1, 'optionNumber' => 2, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], [ 'configuration_id' => 10, 'id' => 1, 'optionNumber' => 3, 'optionActive' => 1, 'lastUpdated' => '2010-03-17 15:44:12' ], ];
solución:
Para ordenar la matriz, podemos utilizar la función de usort de PHP. Usort toma dos argumentos: la matriz para ser ordenadas y una función de comparación que determina el orden de los elementos. La función de comparación debe devolver un valor negativo si el primer elemento debe ocurrir antes del segundo, cero si son equivalentes, y un valor positivo si el primer elemento debe venir después de la segunda.
en este caso, nuestra función de comparación se puede definir de la siguiente manera:
function cmp_by_optionNumber($a, $b) { return $a['optionNumber'] - $b['optionNumber']; }
Esta función resta el valor 'opcionNumber' de la primera matriz de la segunda, lo que resulta en un valor negativo si el primer elemento debe presentarse antes del segundo, un valor cero si son iguales, y un valor positivo si el primer elemento debe venir después del segundo.
para usar esta función de comparación con usort, simplemente lo pasamos como el segundo argumento:'cmp_by_optionnumber');
usort($array, 'cmp_by_optionNumber');
sintaxis alternativa:
en versiones php 5.3 y más tarde, se puede usar una función anónima en lugar de la función de comparación nombrada:
[&] usort ($ a, $ a, $ a, $ a, $ b). devolver $ a ['optionNumber'] - $ b ['optionNumber']; });
usort($array, function ($a, $b) { return $a['optionNumber'] - $b['optionNumber']; });
en las versiones php 7.0 y arriba, el operador de naves espaciales y lt; = & gt; se puede usar en lugar de resta en la función de comparación para evitar problemas de desbordamiento/truncamiento:
usort ($ array, function ($ a, $ b) { devolver $ a ['optionNumber'] & lt; = & gt; $ B ['OppectionNumber']; });Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3