xploit Posted June 7, 2012 at 07:59 AM Report Share #461145 Posted June 7, 2012 at 07:59 AM Pretendo ordenar este arreio, pela ordem da chave "Priority" e sem mexer na ordenação de origem Como está o arreio: /* OUTPUT do arreio: Array ( [0] => Array ( [active] => 1 [func] => funcao_1 [id] => 0 [priority] => 10 ) [1] => Array ( [active] => 1 [func] => funcao_2 [id] => 1 [priority] => 10 ) [2] => Array ( [active] => 1 [func] => funcao_3 [id] => 2 [priority] => 1000 ) ) */ $Array[0]["active"] = 1; $Array[0]["func"] = "funcao_1"; $Array[0]["id"] = 0; // Este "id" é valor que está no index deste mesmo array, como o index é 0 o valor é 0. $Array[0]["priority"] = 10;$Array[1]["active"] = 1; $Array[2]["active"] = 1; $Array[1]["func"] = "funcao_2"; $Array[1]["id"] = 1; // Este "id" é valor que está no index deste mesmo array, como o index é 1 o valor é 1. $Array[1]["priority"] = 10; $Array[2]["active"] = 1; $Array[2]["func"] = "funcao_3"; $Array[2]["id"] = 2; // Este "id" é valor que está no index deste mesmo array, como o index é 2 o valor é 2. $Array[2]["priority"] = 1000; Agora queria criar uma função que ordena-se este arreio por ordem da chave "priority", ou seja do maior ao mais pequeno (1000, 10,10) e sem mexer na ordenação que já se encontra definida. Seria ficar algo como isto: Como está o arreio: /* OUTPUT do arreio depois de filtrado na "tal" função: Array ( [0] => Array ( [active] => 1 [func] => funcao_3 [id] => 2 [priority] => 1000 ) [1] => Array ( [active] => 1 [func] => funcao_1 [id] => 0 [priority] => 10 ) [2] => Array ( [active] => 1 [func] => funcao_2 [id] => 1 [priority] => 10 ) ) */ $Array[0]["active"] = 1; $Array[0]["func"] = "funcao_1"; $Array[0]["id"] = 0; // Este "id" é valor que está no index deste mesmo array, como o index é 0 o valor é 0. $Array[0]["priority"] = 10;$Array[1]["active"] = 1; $Array[2]["active"] = 1; $Array[1]["func"] = "funcao_2"; $Array[1]["id"] = 1; // Este "id" é valor que está no index deste mesmo array, como o index é 1 o valor é 1. $Array[1]["priority"] = 10; $Array[2]["active"] = 1; $Array[2]["func"] = "funcao_3"; $Array[2]["id"] = 2; // Este "id" é valor que está no index deste mesmo array, como o index é 2 o valor é 2. $Array[2]["priority"] = 1000; function FuncaoQueOrdenaOarreio($Array){ ???? } Como viram o arreio que tinha a chave "priority" mais elevado passou para o topo do arreio, e os restantes mantiveram-se nas suas posições de origem, não tenho a menor ideia de como fazer isto deverá secalhar até ser simples mas em lógica :S sugestões? Obrigado PS Moderadores: Eu tinha um outro tópico com esta mesma questão, mas como ja não tem haver directamente com o tópico anterior resolvi abrir aqui. Cumps Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 7, 2012 at 10:29 AM Report Share #461157 Posted June 7, 2012 at 10:29 AM (edited) 1º : deverias ler esta página antes de sequer dizer arreio novamente http://pt.wiktionary.org/wiki/arreio mas se mesmo assim ficaste com dúvidas https://www.google.pt/search?sugexp=chrome,mod%3D12&q=arreio&um=1&ie=UTF-8&hl=pt-PT&tbm=isch&source=og&sa=N&tab=wi&ei=AYPQT5r7K4ql0QXopsjJCw&biw=1366&bih=667&sei=A4PQT8G1F-n80QWN0r3JCw 2º : se queres ordenar o teu array da forma que pretendes, deverás usar a função usort exemplo <?php function cmp($a, $b) { if ($a['priority'] == $b['priority']) return 0; return ($a['priority'] < $b['priority']) ? -1 : 1; } usort($array, "cmp"); Edited June 7, 2012 at 10:30 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
xploit Posted June 7, 2012 at 11:38 AM Author Report Share #461163 Posted June 7, 2012 at 11:38 AM 1º : deverias ler esta página antes de sequer dizer arreio novamente http://pt.wiktionary.org/wiki/arreio mas se mesmo assim ficaste com dúvidas https://www.google.p...1F-n80QWN0r3JCw 2º : se queres ordenar o teu array da forma que pretendes, deverás usar a função usort exemplo <?php function cmp($a, $b) { if ($a['priority'] == $b['priority']) return 0; return ($a['priority'] < $b['priority']) ? -1 : 1; } usort($array, "cmp"); lool com toda a razão, pura ignorância da minha parte, isto foi um num sitio qualquer que vi alguém PT chamar "arreio" ao típico "array", e na minha inocência pensei que assim fosse dito em português, sempre a aprender 😛 Relativamente à função resultou perfeitamente, entretanto tinha arranjado outra solução também, era esta: $rel = array(); foreach ($array as $key => $value ) { $rel[$key] = $value['priority']; } array_multisort($rel, SORT_DESC, $array); Mas sem dúvida a tua é mais clean, muito obrigado pela ajuda Link to comment Share on other sites More sharing options...
brunoais Posted June 7, 2012 at 02:16 PM Report Share #461195 Posted June 7, 2012 at 02:16 PM Já te meteste a meio de um outro tópico para perguntar isto: http://www.portugal-...ca/#entry460440 Não gostamos de duplicados. Tópico trancado. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%. Link to comment Share on other sites More sharing options...
Recommended Posts