Ir para conteúdo

Arquivado

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

gustavohmc

Referencia a arrays associativo

Recommended Posts

Vou colocar o enunciado do exercício para melhor elucidar o problema:

Escreva um algoritmo que a partir de informações de 5 alunos, crie um array associativo que tem como índice o nome do aluno e como dados a nota das 3 provas feitas no ano e a frequência. Calcule a média aritmética de cada aluno e crie relatórios ordenados pela frequência e pela média aritmética.

Vou colocar o código também pois não sei se criei o array corretamente:

<?php 
$dados=array("Aluno_1"=>array("Nome"=>"Gustavo","Nota_1"=>21,"Nota_2"=>25, "Nota_3"=>35, "Frequência"=> "Setenta por cento"),
			 "Aluno_2"=>array("Nome"=>"Felipe","Nota_1"=>23,"Nota_2"=>25, "Nota_3"=>25, "Frequência"=> "Oitenta por cento"),
			 "Aluno_3"=>array("Nome"=>"Tadeu","Nota_1"=>13,"Nota_2"=>25, "Nota_3"=>22, "Frequência"=> "Trinta por cento"),
			 "Aluno_4"=>array("Nome"=>"Josué","Nota_1"=>14,"Nota_2"=>35, "Nota_3"=>32, "Frequência"=> "Trinta por cento"),
		     "Aluno_5"=>array("Nome"=>"Tobias","Nota_1"=>13,"Nota_2"=>25, "Nota_3"=>22,"Frequência"=> "Trinta por cento")
			 );

$media_1=array_sum($dados["Aluno_1"])/3;
$media_2=array_sum($dados["Aluno_2"])/3;
$media_3=array_sum($dados["Aluno_3"])/3;
$media_4=array_sum($dados["Aluno_4"])/3;
$media_5=array_sum($dados["Aluno_5"])/3;


echo "Aluno: ",$dados["Aluno_1"]["Nome"], "<br/>Média: ",$media_1, "<br/>Frequência: ",$dados['Aluno_1']["Frequência"];
echo "<br/><br/>Aluno: ",$dados["Aluno_2"]["Nome"], "<br/>Média: ",$media_2, "<br/>Frequência: ",$dados['Aluno_2']["Frequência"];
echo "<br/><br/>Aluno: ",$dados["Aluno_3"]["Nome"], "<br/>Média: ",$media_3, "<br/>Frequência: ",$dados['Aluno_3']["Frequência"];
echo "<br/><br/>Aluno: ",$dados["Aluno_4"]["Nome"], "<br/>Média: ",$media_4, "<br/>Frequência: ",$dados['Aluno_4']["Frequência"];
echo "<br/><br/>Aluno: ",$dados["Aluno_5"]["Nome"], "<br/>Média: ",$media_5, "<br/>Frequência: ",$dados['Aluno_5']["Frequência"];

?>

Agora as minhas dúvidas:

 

Como eu crio um laço de repetição que referencie ordenadamente as notas de cada aluno e as exiba corretamente?

Anteriormente, a frequência estava como float, porém era somada as da notas e interferia na média. Então como faço para não soma-la a das notas?

 

Agradeço a ajuda!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

primeiro faz isso e veja se a montagem tá do jeito que precisa

echo '<pre>';
    var_dump($dados);
echo '</pre>';

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra ver se eu entendi... Sua primeira duvida é como trazer os dados do array??? Se for isso mesmo, utilize o foreach

 

Sua segunda duvida era referente a soma das notas, em que o campo frequencia estava interferindo na soma, correto?

Nesse caso você terá que refazer esse array. Jogando as notas dentro de um outro array, fazendo um array multidimensional.

 

Ficaria mais ou menos assim o array:

$dados2 = array(
    'Alunos' => array(
        'Gustavo' => array(
            'Notas' => array(
                'Nota_1' => 21,
                'Nota_2' => 25,
                'Nota_3' => 35
            ),
            'Frequencia' => 0.7
        ),
        'Felipe' => array(
            'Notas' => array(
                'Nota_1' => 23,
                'Nota_2' => 25,
                'Nota_3' => 25
            ),
            'Frequencia' => 0.8
        ),
        'Tadeu' => array(
            'Notas' => array(
                'Nota_1' => 13,
                'Nota_2' => 25,
                'Nota_3' => 22
            ),
            'Frequencia' => 0.3
        )
    )
);

 

E a soma seria dessa forma:

$media_1=array_sum($dados2['Alunos']['Gustavo']['Notas'])/3;

 

Removi os campos Nome e Aluno_1, Aluno_2, etc..... Pois nao vi sentido em colocar uma chave Aluno_1 e em seguida uma chave com chamada Nome... enfim, só acho que assim deixa o array mais simples, mas com as chaves que retirei tambem funcionaria.

 

Me esclareça melhor sua primeira dúvida que nao me ficou muito claro.

E acredito que entendi sua segunda duvida e a solução esta postada acima...

 

Abs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Modifiquei a estrutura. A primeira duvida é em relação a como vou chamar os valores passados. Ao invés de criar 5 médias como eu fiz, queria criar uma só usando uma estrutura de repetição, e depois o mesmo para demonstrar o nome a média e a frequencia.

 

Valeu pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da uma lida aqui:

https://secure.php.net/manual/pt_BR/language.types.array.php

 

Documentação deve ser sua melhor amiga/sua amante/sua confidente.

 

passos pequenos, e identa esse código pelo amor de Deus, exemplo do ´codigo' identado:

 

 

Durante a indentação da pra encontrar erros de maneira visual bem facil, exemplo:

$dados=array(
	 "Aluno_1" => array(
		"Nome" => 
			"Gustavo"
			,"Nota_1"=>21

Isso aqui está errado.

 

Um array só pode ter dados simples, caso queira fazer um agrupamento você precisa de um outro array...

Ex:

$alunos = array(
	array(
		 'nome' => 'Gabriel'
		,'notas' => array(
			 5
			,10
			,3
		)
	)
	,array(
		 'nome' => 'Jose'
		,'notas' => array(
			 8
			,9
			,10
		)
	)
);

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Recomendo a leitura disso:
http://php.net/manual/pt_BR/control-structures.for.php

 

 

Vamos aproveitar a estrutura q eu fiz... 

 

$alunos = array(
	array(
		 'nome' => 'Gabriel'
		,'notas' => array(
			 5
			,10
			,3
		)
	)
	,array(
		 'nome' => 'Jose'
		,'notas' => array(
			 8
			,9
			,10
		)
	)
);


foreach($alunos as $aluno){
	echo 'Notas do aluno: ' . $aluno['nome'] . '<br />';
	
	echo '<ul>';
	foreach($aluno['notas'] as $nota){
		echo "<li>". $nota ."</li>";
	}
	echo '</ul>';
}

Saída:

Citar

 

Notas do aluno: Gabriel

  • 5
  • 10
  • 3

Notas do aluno: Jose

  • 8
  • 9
  • 10

 

  •  

Basicamente Percorremos todos os alunos, exibindo o nome e seu array de notas.


(array) alunos 

->(string) nome

->(array) notas

 

 

Entende?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por marsolim
      Olá a todos. Venho com um probleminha para o qual não encontrei resposta. Talvez, eu não tenha sabido os termos certos para pesquisar. É o seguinte... estou tentando incluir, em uma lista array, índices com valores montados em uma variável a partir de outra array e não estou a conseguir. Atualmente, meu código é o seguinte...
      var ids = {     "joby": "track 01",     "dobby": "track 02",     "medz": "track 03",     "decks": "track 04,     "tecks": "track 05",     "assud": "track 06",     "mand": "track 07",     "daly": "track 08", }; var lstIds = []; for(i in ids){         lstIds[i] =  {         dock: ids[i],         adb: 0,         mdc: 0,         bah: 0,         tek: 0,         dep: 0,         tos: 0     }; }  
      Até aqui ok. É o que tenho no momento. O que estou querendo fazer é colocar, no lugar das linhas de adb: 0 até dep: 0, outra array que criei com esses índices, porque pode ser que eu precise adicionar mais valores e eu quero fazer isso na array nova porque vou usar ela em vários lugares e eu teria que alterar em todos se não fizer essa modificação. Fazendo ela, eu alteraria apenas nela mesmo. Então, agora, com a array nova, seria algo assim:
      var ids = {     "joby": "track 01",     "dobby": "track 01",     "medz": "track 01",     "decks": "track 01",     "tecks": "track 01",     "assud": "track 01",     "mand": "track 01",     "daly": "track 01", }; var juds = ["adb", "mdc", "bah", "tek", "dep"]; //lista nova com os valores var lstIds = []; for(i in ids){         lstIds[i] =  {         dock: ids[i],         adb: 0,         mdc: 0,         bah: 0,         tek: 0,         dep: 0,         tos: 0     }; }  
      O que eu preciso é incluir os valores de juds em lstIds. Da forma que está, não consigo fazer um for dentro do outro for para pegar esses dados e não consigo, também, criar ele fora e inserir com variável, tipo:
      var fJuds = ""; for(i in juds){     fJuds += juds[i] + ": 0,"; } for(i in ids){         lstIds[i] =  {         dock: ids[i],         fJuds // Aqui eu incluiria a variável no lugar das linhas...         tos: 0     }; }  
      Bem, o que eu queria saber mesmo é como eu poderia inserir uma variável no meio duma lista desse tipo... se é possível.
       
      Agradeço pela atenção...
    • Por Willian Simione
      Boa Noite, alguem poderia me ajudar em uma situação, estou tetnando gravar os dados da tela abaixo, porem nao estou conseguindo montar o jeito certo pra ele gravar todos os dados de uma vez

    • Por Millena Oliveira
      Oiii gente, boa noite. Estou estudando ainda e me deram um desafio para desenvolver um programa que imprimisse na tela somente os números primos segundo o valor que o usuário colocasse na execução. Utilizei o readLine para isso. Usei um objeto para que repetisse a execução e salvei todos os números numa array. O problema é, quando faço o teste colocando um número qualquer, retorna uma array vazia. Poderia me dar uma ajuda? Segue abaixo todo o código.
      Obrigada :)
       
      var readline = require("readline"); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); function desafioPrimos() { var primos = []; rl.question("Digite um número: ", function (num) { console.log(primos); numero = parseInt(num); numerosPrimos: for (var x = 2; x <= num; x++) { for (var y = 2; y < x; y++) { if (x % y === 0) continue numerosPrimos; }; primos.push(x); rl.close(); }; }); }; desafioPrimos();  
    • Por lordzyrium
      Seguinte. Estou tendo dificuldades em criar um array a partir de outro array. E o que preciso é que a saída seja exatamente assim:
      $dados_out = array(     'nome' => 'Nome do Aluno',     'diciplina_notas' => array(         array('PORTUGUÊS', '7ano' => '7,5', '8ano' => '7,0', '9ano' => '8,0'),         array('REDAÇÃO', '7ano' => '8,5', '8ano' => '9,0', '9ano' => '9,0'),         array('HISTÓRIA', '7ano' => '9,5', '8ano' => '8,5', '9ano' => '8,5'),         array('GEOGRAFICA', '7ano' => '7,0', '8ano' => '8,5', '9ano' => '8,0'),         array('QUIMICA', '7ano' => '--', '8ano' => '--', '9ano' => '8,5'),     ) ); A partir deste código:
       
      $dados = array( array( 'nome'=> 'Nome do Aluno', 'etapa'=> '7º ANO', 'pos' => 7, 'not_dados'=> array( array('PORTUGUES', '7,5', '120H', 'AP'), array('REDAÇÃO', '8,5', '40H', 'AP'), array('HISTÓRIA', '9,0', '80H', 'AP'), array('GEOGRAFIA', '7,0', '80H', 'AP') ) ), array( 'nome'=> 'Nome do Aluno', 'etapa'=> '8º ANO', 'pos' => 8, 'not_dados'=> array( array('PORTUGUES', '7,0', '120H', 'AP'), array('HISTÓRIA', '8,5', '80H', 'AP'), array('REDAÇÃO', '9,0', '40H', 'AP'), array('GEOGRAFIA', '8,5', '80H', 'AP') ) ), array( 'nome'=> 'Nome do Aluno', 'etapa'=> '9º ANO', 'pos' => 9, 'not_dados'=> array( array('PORTUGUES', '8,0', '120H', 'AP'), array('HISTÓRIA', '8,5', '80H', 'AP'), array('REDAÇÃO', '9,0', '40H', 'AP'), array('GEOGRAFIA', '8,0', '80H', 'AP'), array('QUIMICA', '8,5', '80H', 'AP') ) ), );  
       
      OBS: terá todas as etapas e as diciplinas não podem ser repetidas.
      Quem puder ajudar desde já agradeço.
       
    • Por MCL_2007
      Boa dia Amigos...
      Tenho esses arrays:
      Array (
      [0] => 2535
      [1] => 2433
      )
      Array (
      [0] =>
      [1] => marcelo@gmail.com;m@terra.com.br
      [2] =>
      [3] => neusa@terra.com.br
      )
       
      Preciso do seguinte resultado de saida:
      2535 - marcelo@gmail.com;m@terra.com.br
      2433 -  neusa@terra.com.br
       
      Como faço , alguem pode me ajudar?
      Gratidao.
×

Informação importante

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