Como posso classificar essa matriz pelo valor da chave "order"? Mesmo que os valores sejam atualmente seqüenciais, eles nem sempre serão.
Array
(
[0] => Array
(
[hashtag] => a7e87329b5eab8578f4f1098a152d6f4
[title] => Flower
[order] => 3
)
[1] => Array
(
[hashtag] => b24ce0cd392a5b0b8dedc66c25213594
[title] => Free
[order] => 2
)
[2] => Array
(
[hashtag] => e7d31fc0602fb2ede144d18cdffd816b
[title] => Ready
[order] => 1
)
)
Respostas:
Experimente um usort , se você ainda está no PHP 5.2 ou anterior, terá que definir uma função de classificação primeiro:
A partir do PHP 5.3, você pode usar uma função anônima:
E, finalmente, com o PHP 7, você pode usar o operador de nave espacial :
Para estender isso à classificação multidimensional, faça referência aos segundo / terceiro elementos de classificação, se o primeiro for zero - melhor explicado abaixo. Você também pode usar isso para classificar subelementos.
Se você precisar manter associações de teclas, use
uasort()
- consulte a comparação das funções de classificação de matriz no manualfonte
uasort()
se você deseja preservar as chaves da matriz.fonte
Eu uso esta função:
fonte
array_multisort
e, portanto, não precisa pré-alocar$sort_col
, economizando tempo e memória .&$arr
vez de apenas$arr
?Eu normalmente uso usort e passo minha própria função de comparação. Nesse caso, é muito simples:
No PHP 7, usando o operador de nave espacial:
fonte
$a['order']
é 3 e$b['order']
é 6, retornarei -3. Corrigir?Uma abordagem para conseguir isso seria assim
Resultado:
fonte
Para classificar a matriz pelo valor da chave "title", use:
strcmp compara as strings.
uasort () mantém as chaves da matriz como elas foram definidas.
fonte
Isso cuida dos alfabetos maiúsculas e minúsculas.
fonte
Use
array_multisort()
,array_map()
DEMO
fonte
array_multisort
referencia seu primeiro parâmetro.A abordagem mais flexível seria usar esse método
aqui está o porquê:
Você pode classificar por qualquer chave (também aninhada como
'key1.key2.key3'
ou['k1', 'k2', 'k3']
)Funciona em matrizes associativas e não associativas (
$assoc
sinalizador)Ele não usa referência - retorna uma nova matriz classificada
No seu caso, seria tão simples quanto:
Este método faz parte desta biblioteca .
fonte
Vamos ser sinceros: o php NÃO possui uma função simples e pronta para lidar adequadamente com todos os cenários de classificação de array.
Essa rotina é intuitiva, o que significa depuração e manutenção mais rápidas:
fonte
global
é uma enorme bandeira vermelha e geralmente é desencorajado . Por que estámysql_fetch_array
sendo demonstrado para esta pergunta em vez da matriz de origem do OP, e que não há explicação do que seu código está fazendo e do que se pode esperar que o resultado seja? No geral, essa é uma abordagem muito complexa para alcançar o resultado final desejado.global
ver: 3v4l.org/FEeFC Isso produz uma variável definida explicitamente, em vez de uma que pode ser alterada e acessada globalmente.Você também pode classificar a matriz multidimensional para vários valores, como
com
Saída usando
print_r($arr)
:PS) usando strcmp seria uma boa opção para comparar as strings.
fonte