mruoppolo 14 Denunciar post Postado Setembro 20, 2016 Olá, tudo bem? Eu tenho um array multi dimensional que preciso ordenar em ordem crescente, o array é este: $numSorteado = $jsonObj['Sorteios']['0']['Numeros']; Como eu posso fazer para todos os dados dentro dele virem em ordem crescente?? Eu tentei o sort(), mas não funcionou :/ Você sabe como fazer? Obrigado :D Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Setembro 20, 2016 array-multisort Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Setembro 20, 2016 Ficaria assim? $numSorteado2 = $jsonObj['Sorteios']['0']['Numeros']; $numSorteado = array_multisort($numSorteado2); Porque assim não funcionou :/ Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Setembro 21, 2016 Passe o índice, não o array inteiro.Estude os exemplos!Exemplo #2 Ordenando arrays multi dimensionais <?php $ar = array( array("10", 11, 100, 100, "a"), array( 1, 2, "2", 3, 1) ); array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC); var_dump($ar); ?> output array(2) { [0]=> array(5) { [0]=> string(2) "10" [1]=> int(100) [2]=> int(100) [3]=> int(11) [4]=> string(1) "a" } [1]=> array(5) { [0]=> int(1) [1]=> int(3) [2]=> string(1) "2" [3]=> int(2) [4]=> int(1) } } Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Setembro 22, 2016 Passe o índice, não o array inteiro. Estude os exemplos! Exemplo #2 Ordenando arrays multi dimensionais <?php $ar = array( array("10", 11, 100, 100, "a"), array( 1, 2, "2", 3, 1) ); array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC); var_dump($ar); ?> output array(2) { [0]=> array(5) { [0]=> string(2) "10" [1]=> int(100) [2]=> int(100) [3]=> int(11) [4]=> string(1) "a" } [1]=> array(5) { [0]=> int(1) [1]=> int(3) [2]=> string(1) "2" [3]=> int(2) [4]=> int(1) } } Cara dei uma boa analisada aqui e pelo que eu entendi é pra usar assim: $numSorteado2 = $jsonObj['Sorteios']['0']['Numeros']; $numSorteado = array_multisort( $numSorteado2["0"], SORT_ASC, SORT_NUMERIC, $numSorteado2["1"], SORT_ASC, SORT_NUMERIC, $numSorteado2["2"], SORT_ASC, SORT_NUMERIC, $numSorteado2["3"], SORT_ASC, SORT_NUMERIC, $numSorteado2["4"], SORT_ASC, SORT_NUMERIC, $numSorteado2["5"], SORT_ASC, SORT_NUMERIC, $numSorteado2["6"], SORT_ASC, SORT_NUMERIC, $numSorteado2["7"], SORT_ASC, SORT_NUMERIC, $numSorteado2["8"], SORT_ASC, SORT_NUMERIC, $numSorteado2["9"], SORT_ASC, SORT_NUMERIC, $numSorteado2["10"], SORT_ASC, SORT_NUMERIC, $numSorteado2["11"], SORT_ASC, SORT_NUMERIC, $numSorteado2["12"], SORT_ASC, SORT_NUMERIC, $numSorteado2["13"], SORT_ASC, SORT_NUMERIC, $numSorteado2["14"], SORT_ASC, SORT_NUMERIC ); for ($i=0; $i<=14; $i++) { switch ($numSorteado[$i]) { case '5': $class = " class='danger'"; break; case '6': $class = " class='danger'"; break; case '7': $class = " class='danger'"; break; case '12': $class = " class='danger'"; break; case '13': $class = " class='danger'"; break; case '14': $class = " class='danger'"; break; case '19': $class = " class='danger'"; break; case '20': $class = " class='danger'"; break; case '21': $class = " class='danger'"; break; default: $class = ""; break; } echo "<td".$class.">".$numSorteado[$i]."</td>"; } Porém ele esta printando o seguinte erro: Warning: array_multisort(): Argument #1 is expected to be an array or sorting flag that has not already been specified in C:\xampp\htdocs\plugins\wp-content\plugins\loteria-webservice\index.php on line 60 Acho que ainda tem algum argumento faltando, o que seria?? Obrigado :D Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Setembro 22, 2016 Dei mais uma modificada, ele esta mostrando os números certinho, porém ele não esta ordenando corretamente e ainda esta com o problema da mensagem de erro: $numSorteado2 = $jsonObj['Sorteios']['0']['Numeros']; array_multisort( $numSorteado2[0], SORT_ASC, SORT_STRING, $numSorteado2[1], SORT_ASC, SORT_STRING, $numSorteado2[2], SORT_ASC, SORT_STRING, $numSorteado2[3], SORT_ASC, SORT_STRING, $numSorteado2[4], SORT_ASC, SORT_STRING, $numSorteado2[5], SORT_ASC, SORT_STRING, $numSorteado2[6], SORT_ASC, SORT_STRING, $numSorteado2[7], SORT_ASC, SORT_STRING, $numSorteado2[8], SORT_ASC, SORT_STRING, $numSorteado2[9], SORT_ASC, SORT_STRING, $numSorteado2[10], SORT_ASC, SORT_STRING, $numSorteado2[11], SORT_ASC, SORT_STRING, $numSorteado2[12], SORT_ASC, SORT_STRING, $numSorteado2[13], SORT_ASC, SORT_STRING, $numSorteado2[14], SORT_ASC, SORT_STRING ); for ($i=0; $i<=14; $i++) { switch ($numSorteado2[$i]) { case '5': $class = " class='danger'"; break; case '6': $class = " class='danger'"; break; case '7': $class = " class='danger'"; break; case '12': $class = " class='danger'"; break; case '13': $class = " class='danger'"; break; case '14': $class = " class='danger'"; break; case '19': $class = " class='danger'"; break; case '20': $class = " class='danger'"; break; case '21': $class = " class='danger'"; break; default: $class = ""; break; } echo "<td".$class.">".$numSorteado2[$i]."</td>"; } Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Setembro 22, 2016 Mas não é assim que se usa, você ta fazendo na unha! use foreach para mapear os indices, depois use array_multisort Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Setembro 22, 2016 Cara tem como me mostra um exemplo, por favor?? Não estou conseguindo entender :/ Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Setembro 22, 2016 O quê retorna? var_dump( $jsonObj['Sorteios']['0']['Numeros'] ); Edit: @Williams Duarte, demorei :rolleyes: , mas saquei sobre o que você estava falando. :ph34r: Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Setembro 22, 2016 O quê retorna? var_dump( $jsonObj['Sorteios']['0']['Numeros'] ); Edit: @Williams Duarte, demorei :rolleyes: , mas saquei sobre o que você estava falando. :ph34r: array(15) { [0]=> int(3) [1]=> int(4) [2]=> int(11) [3]=> int(13) [4]=> int(23) [5]=> int(2) [6]=> int(9) [7]=> int(7) [8]=> int(20) [9]=> int(14) [10]=> int(21) [11]=> int(10) [12]=> int(5) [13]=> int(16) [14]=> int(17) } Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Setembro 22, 2016 Cara tem como me mostra um exemplo, por favor?? Não estou conseguindo entender :/Mais ou menos assim! $jsonObj['Sorteios']['0']['Numeros'] foreach ($jsonObj as $key => $obj) { $Numeros[$key] = $row['Numeros']; } array_multisort($Numeros, SORT_ASC, $jsonObj); Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Setembro 23, 2016 Caramba, realmente não consigo fazer, kkkk, agora ele não mostra nada, olha só como ficou: $numSorteado = $jsonObj['Sorteios']['0']['Numeros']; foreach ($numSorteado as $key => $obj) { $Numeros[$key] = $obj['Numeros']; } array_multisort($Numeros, SORT_ASC, $numSorteado); for ($i=0; $i<=14; $i++) { switch ($Numeros[$i]) { case '5': $class = " class='danger'"; break; case '6': $class = " class='danger'"; break; case '7': $class = " class='danger'"; break; case '12': $class = " class='danger'"; break; case '13': $class = " class='danger'"; break; case '14': $class = " class='danger'"; break; case '19': $class = " class='danger'"; break; case '20': $class = " class='danger'"; break; case '21': $class = " class='danger'"; break; default: $class = ""; break; } echo "<td".$class.">".$Numeros[$i]."</td>"; } Mas ele não puxa mais os números :/ Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Setembro 23, 2016 Quando você falou que queria Ordenar arrays multidimentsionais Achei que fosse ordenar pelo índice Numeros, e que tivesse outros $jsonObj['Sorteios']['0']['Numeros'] Mas se for só o que esta acima, print do var_dump Acredito que arsort resolvehttp://php.net/manual/pt_BR/function.arsort.php Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Setembro 23, 2016 Por isso a importância de debugar o script Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Setembro 23, 2016 Quando você falou que queria Achei que fosse ordenar pelo índice Numeros, e que tivesse outros $jsonObj['Sorteios']['0']['Numeros'] Mas se for só o que esta acima, print do var_dump Acredito que arsort resolve http://php.net/manual/pt_BR/function.arsort.php Então eu coloquei esta função, ficou assim: <?php $numSorteado = $jsonObj['Sorteios']['0']['Numeros']; $Numeros = arsort($numSorteado); for ($i=0; $i<=14; $i++) { switch ($Numeros[$i]) { case '5': $class = " class='danger'"; break; case '6': $class = " class='danger'"; break; case '7': $class = " class='danger'"; break; case '12': $class = " class='danger'"; break; case '13': $class = " class='danger'"; break; case '14': $class = " class='danger'"; break; case '19': $class = " class='danger'"; break; case '20': $class = " class='danger'"; break; case '21': $class = " class='danger'"; break; default: $class = ""; break; } echo "<td".$class.">".$Numeros[$i]."</td>"; } ?> Não apareceu nada e quando eu dou um var_dump aparece o seguinte: bool(true) Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Setembro 23, 2016 Cara, você está fazendo errado. Olhe o link que o @Williams Duarte te passou sobre a função arsort. É de suma importância ler/estudar sobre as funções que você utiliza. "As restrições impostas por uma dada linguagem de programação ou o conhecimento incompleto das suas potencialidades pode conduzir a raciocínios (e consequentes projetos) relativamente limitados." Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Setembro 23, 2016 Cara, você está fazendo errado. Olhe o link que o @Williams Duarte te passou sobre a função arsort. É de suma importância ler/estudar sobre as funções que você utiliza. "As restrições impostas por uma dada linguagem de programação ou o conhecimento incompleto das suas potencialidades pode conduzir a raciocínios (e consequentes projetos) relativamente limitados." Então mas eu li, me baseei no primeiro exemplo que eles estão dando, o problema é que tem 2 linhas só falando sobre a função na documentação do PHP, de qualquer forma eu mudei 2 linhas: $Numeros = $jsonObj['Sorteios']['0']['Numeros']; arsort($Numeros, SORT_ASC); Já que só depois eu tendi que era uma função booleana, mas assim, ela esta ordenando de forma decrescente e não de forma crescente como eu preciso e assim, essa ordenação só funciona no var_dump(), na parte parte que eu preciso que é a tabela, ela não funciona, fica tudo desordenado :/ Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Setembro 23, 2016 Só pra exemplificar melhor o que eu estou tentando fazer: Esta tabela onde tem o concurso e a data, ela precisa mostrar os resultados em ordem crescente e quando um dos números sorteados for igual a algum dos números do padrão ela deixa vermelho, já foi feito tudo, porém eu não consigo fazer ela mostrar os números do resultado corretamente, entende? Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Setembro 23, 2016 Se no var_dump ela está correta, então, o problema está a partir desse ponto, pois ela não vai reordenar sozinha. Compartilhar este post Link para o post Compartilhar em outros sites
mruoppolo 14 Denunciar post Postado Setembro 23, 2016 A ordem não esta correta no var_dump, ela esta decrescente, eu preciso dela crescente :/ Compartilhar este post Link para o post Compartilhar em outros sites