Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mruoppolo

Ordenar arrays multidimentsionais

Recommended Posts

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

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

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

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

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

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

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

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

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

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 resolve

http://php.net/manual/pt_BR/function.arsort.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

Só pra exemplificar melhor o que eu estou tentando fazer:

print.jpg

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.