Jump to content

Ordenar arreio pela chave "priority"


xploit

Recommended Posts

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

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 by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

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

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.