Ir para conteúdo

Arquivado

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

Eduardo Villa

Percorrer array multidimensional e encontrando o mínimo valor

Recommended Posts

Salve galera,

 

Depois de quase dois anos estou de volta e com um dúvida...

Tenho um array com 38 posições, mas só vou postar a primeira para não fica muito extenso o post.

array(38) {
  [836]=>
  array(13) {
    [13]=>
    int(732)
    [12]=>
    array(1) {
      [1360]=>
      int(208)
    }
    [11]=>
    array(1) {
      [2372]=>
      int(32)
    }
    [10]=>
    array(1) {
      [2372]=>
      array(1) {
        [841]=>
        int(27)
      }
    }
    [9]=>
    array(1) {
      [4009]=>
      int(67)
    }
    [8]=>
    array(1) {
      [4903]=>
      int(9)
    }
    [7]=>
    array(1) {
      [5747]=>
      int(1)
    }
    [6]=>
    array(1) {
      [6199]=>
      int(385)
    }
    [5]=>
    array(1) {
      [6966]=>
      int(454)
    }
    [4]=>
    array(1) {
      [7728]=>
      int(528)
    }
    [3]=>
    array(1) {
      [7728]=>
      array(1) {
        [1360]=>
        int(4)
      }
    }
    [2]=>
    array(1) {
      [7728]=>
      array(1) {
        [1598]=>
        int(602)
      }
    }
    [1]=>
    array(1) {
      [7728]=>
      array(1) {
        [2372]=>
        int(664)
      }
    }
  }

 

Preciso percorrer ele todo e encontrar o menor valor, mas mantendo a sua estrutura... Loucura né kkkk, pois calma, vou explicar melhor:

 - Para encontrar o menor valor utilizei o código abaixo

array_walk_recursive($array,function($v) use(&$a){
	$a[] = $v;
});
return min($a);

 

 - E depois de descobrir o menor valor é 1, preciso recuperar a sua estrutura:

 

[836]=>
  array(13) {
	[7]=>
	  array(1) {
		[5747]=>
		  int(1)

 

Alguém pode me ajudar???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve galera,

Consegui resolver o problema de identificar a estrutura do array pelo menor valor com este código abaixo:

function buscaMelhorCorte($min, $arr, $strict=false, $path=array())
	{
		if (!is_array($arr)) {
			return false;
		}

		foreach ($arr as $key => $val) {

			if (is_array($val) && $subPath = buscaMelhorCorte($min, $val, $strict, $path)) {

				$path = array_merge($path, array($key), $subPath);
				return $path;

			} elseif ((!$strict && $val == $min) || ($strict && $val === $min)) {

				$path[] = $key;
				return $path;

			}

		}
	}

Porém agora me apareceu mais um problema...

Caso tenha mais de um valor menor preciso pegar o de maior indice, exemplo:

Tenho um array com 37 posições, mas vou cortar o que não interessa:

[836]=>
  array(13) {
    ...
    [7]=>
    array(1) {
      [5747]=>
      int(1)
    }
    ...
  }
[3688]=>
  array(3) {
    [3]=>
    int(536)
    [2]=>
    array(1) {
      [4223]=>
      int(1)
    }
    ...
  }
[4619]=>
  array(2) {
    [2]=>
    array(1) {
      [2361]=>
      int(1)
    }
    ...
  }

Esses 3 trechos terminam com 1, na função acima ele me exibe o trecho da chave [836] porém preciso da chave maior [4619] ...

 

Poderiam me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Boa tarde, pessoal.
      Espero que todos estejam bem.
       
      Seguinte:
      Tenho a seguinte consulta:
       
      $usuarios= "SELECT * FROM usuarios";
      $query= mysqli_query($conexao, $usuarios) or die ("Usuário não encontrado");
      $usuario = mysqli_fetch_array($query);
       
      Quero pegar apenas o campo 'nome' da tabela 'usuarios' e colocar todos os resultados da seguinte forma:
       
      $nomes = array("Rafael", "João", "Maria", "Pedro", "Patricia", "Camila");
       
      Agradeço desde já.
      Abs
       
       
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
    • Por mateus.andriollo
      Existe uma forma de fazer um IF na select e comparar com Array de dados?
       
      algo como
       
      Select if( in_array(idCliente,'1,2,3,4,5')=true,'Tem','Não') ) as cliente Não consigo usar inner ou where pois esse resultado do array é algo q tem varias regras...
       
      Precisava saber se existe uma função assim em MySQL
    • Por clovis.sardinha
      Bom dia.
      Meu problema é o seguinte:
      Estou fazendo uma tabela e preciso mostrar o usuário e várias cidades que pertencem a este usuário.
      O resultado do array é o seguinte:

      Quando passo para a tabela os valores de cidade se repetem para o mesmo usuário até o final e retorna fazendo o mesmo para o próximo usuário. 
      Veja abaixo

       
      Meu código para a tabela é a seguinte:
      <tr> <td align="left"><?php echo $usuario['nome'] ?></td> <td align="left"><?php echo $usuario['nome_orgao'] ?></td> <td align="left"><?php echo $usuario['nome_funcao'] ?></td> <?php foreach($destinos as $key=>$destino):?> <?php $key=0;?> <td align="left"> <?php foreach($destino as $chave=> &$cidade): ?> <?php echo $cidade['cid_nome']."-";?> <?php endforeach;?> </td> <?php $key+=$key; ?> <?php endforeach;?> <td><?php echo date('d/m/Y', strtotime( $usuario['created_at'])) ?></td> <td align="left"><a href="<?php echo base_url('UserAdmin/Usuario/getUsuarioById')."/".$usuario['id_user'] ?>">DETALHES</a></td> </tr> <?php endforeach ?> Onde estou errando? O que tenho de fazer para percorrer este array de modo a aparecer apenas as cidades pertencentes a cada usuário?

    • Por Giovanird
      Listo um array pelo foreach e preciso pegar os valores fora do foreach.
      Abaixo tenho o exemplo do foreach com os valores
       
      <?php foreach($turma $rsturma): if(($rsturma['id'] == 1){ echo $rsturma['nome']."<br>"; echo $rsturma['idade']."<br><br>"; } endforeach; //Dentro do foreach me retorna: Luis 13 Maria 12 Carlos 12 Matheus 14 Andréa 12 //Preciso pegar a posição e o valor desta lista $posicao1 = 1; $nome1 = Luis; $posicao2 = 2; $nome2 = Maria; $posicao3 = 3; $nome3 = Carlos; $posicao4 = 4; $nome4 = Matheus; $posicao5 = 5; $nome5 = Andréa;  
×

Informação importante

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