Jump to content
lordzyrium

Dificuldades para criar arrays de outro array multidimensional

Recommended Posts

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.

 

Share this post


Link to post
Share on other sites

Com as novidades versão do php, a 7.4, você consegue fazer isto de uma forma mais simples.

Entrou na parada Arrow Functions e Spread Operator

duas funções no maximo você extrai tudo isto ai, e monta da forma como quer!

https://www.php.net/manual/pt_BR/function.array-map.php
https://www.php.net/manual/pt_BR/function.array-filter.php

Share this post


Link to post
Share on other sites
1 minuto atrás, Williams Duarte disse:

Com as novidades versão do php, a 7.4, você consegue fazer isto de uma forma mais simples.

Entrou na parada Arrow Functions e Spread Operator

duas funções no maximo você extrai tudo isto ai

https://www.php.net/manual/pt_BR/function.array-map.php
https://www.php.net/manual/pt_BR/function.array-filter.php

 Vou dar uma olhada no assunto.
Valeu e abraços. Qualquer coisa retorno.

Share this post


Link to post
Share on other sites

Faz o seguinte, use primeiro array_reduce e pega as notas e monte o array diciplina_notas, depois ou use map/filter para os demais dados e faça um merge. De uma olhada aqui no manual e estude funções para array https://www.php.net/manual/pt_BR/ref.array.php

Exemplo

$data =  array_reduce($dados, function($accumulator, $item) { 	
  $accumulator['nome'][] = $item['nome'];		
  $accumulator['etapa'][] = $item['etapa'];		
  $accumulator['pos'][] = $item['pos'];		
  $accumulator['not_dados'][] = $item['not_dados'];
  return $accumulator; 
}, []);



print_r($data);

Saída 

 

Array
(
    [nome] => Array
        (
            [0] => Nome do Aluno
            [1] => Nome do Aluno
            [2] => Nome do Aluno
        )

    [etapa] => Array
        (
            [0] => 7º  ANO
            [1] => 8º  ANO
            [2] => 9º  ANO
        )

    [pos] => Array
        (
            [0] => 7
            [1] => 8
            [2] => 9
        )

    [not_dados] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [0] => PORTUGUES
                            [1] => 7,5
                            [2] => 120H
                            [3] => AP
                        )

                    [1] => Array
                        (
                            [0] => REDAÇÃO
                            [1] => 8,5
                            [2] => 40H
                            [3] => AP
                        )

                    [2] => Array
                        (
                            [0] => HISTÓRIA
                            [1] => 9,0
                            [2] => 80H
                            [3] => AP
                        )

                    [3] => Array
                        (
                            [0] => GEOGRAFIA
                            [1] => 7,0
                            [2] => 80H
                            [3] => AP
                        )

                )

            [1] => Array
                (
                    [0] => Array
                        (
                            [0] => PORTUGUES
                            [1] => 7,0
                            [2] => 120H
                            [3] => AP
                        )

                    [1] => Array
                        (
                            [0] => HISTÓRIA
                            [1] => 8,5
                            [2] => 80H
                            [3] => AP
                        )

                    [2] => Array
                        (
                            [0] => REDAÇÃO
                            [1] => 9,0
                            [2] => 40H
                            [3] => AP
                        )

                    [3] => Array
                        (
                            [0] => GEOGRAFIA
                            [1] => 8,5
                            [2] => 80H
                            [3] => AP
                        )

                )

            [2] => Array
                (
                    [0] => Array
                        (
                            [0] => PORTUGUES
                            [1] => 8,0
                            [2] => 120H
                            [3] => AP
                        )

                    [1] => Array
                        (
                            [0] => HISTÓRIA
                            [1] => 8,5
                            [2] => 80H
                            [3] => AP
                        )

                    [2] => Array
                        (
                            [0] => REDAÇÃO
                            [1] => 9,0
                            [2] => 40H
                            [3] => AP
                        )

                    [3] => Array
                        (
                            [0] => GEOGRAFIA
                            [1] => 8,0
                            [2] => 80H
                            [3] => AP
                        )

                    [4] => Array
                        (
                            [0] => QUIMICA
                            [1] => 8,5
                            [2] => 80H
                            [3] => AP
                        )

                )

        )

)



Bom não vou fazer para você, que o trampo é seu, estamos aqui só para orientar.

Vai postando oque fez, que a comunidade te ajuda!

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By tetsuo
      Boas galera?
      Às vezes subo um projeto que, despercebidamente passa um arquivo com letra maiúscula/minúscula
      E dá trabalho pra descobrir que era somente e apenas isso.
       
      Como posso resolver isso?
      Uso rWindows 10.
      Mas a hospedagem é em linux.
       
      O Docker serviria pra me ajudar com essa questão?
       
    • By lUANZIKA3
      minha pagina contém uma table que
      exibe a ultima id da minha DB porém ela não fica ativa.
      a ultima id só é exibida se o form tiver sido enviado.
      ↓table aonde é exibida a Insert_id
      <table class="table table-dark" method="POST" action="processa.php"> <thead> <tr> <th scope="col">#</th> <th scope="col">Ultimo ID</th> </tr> </thead> <tbody> <tr> <th scope="row">1</th> <td> <?php if(isset($_SESSION['id'])){ echo $_SESSION['id']; } ?></td> </tr> </tbody> </table> Agora a conexao.php
      <?php session_start(); $servidor = "localhost"; $usuario = "root"; $senha = ""; $dbname = "contas"; //Criar a conexao $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING); $face = filter_input(INPUT_POST, 'face', FILTER_SANITIZE_STRING); $numeros = filter_input(INPUT_POST, 'numeros', FILTER_SANITIZE_STRING); //echo "Nome: $nome <br>"; //echo "E-mail: $email <br>"; $result_usuario = "INSERT INTO usuarios (nome, face, numeros, created) VALUES ('$nome', '$face', '$numeros', NOW())"; if ($conn->query($result_usuario) === TRUE) { $id = $conn->insert_id; $_SESSION['id'] = "" . $id; } else { echo "Error: " . $result_usuario . "<br>" . $conn->error; } $resultado_usuario = mysqli_query($conn, $result_usuario); if(mysqli_insert_id($conn)){ $_SESSION['msg'] = "<div class='alert alert-success' role='alert'> Parabéns agora você está participando! </div>"; header("Location: index.php"); }else{ $_SESSION['msg'] = "<div class='alert alert-danger' role='alert'> OPS! Parece que você já está participando, espere por outro sorteio e volte! </div>"; header("Location: index.php"); }  
    • By lUANZIKA3
      minha pagina contém uma table que
      exibe a ultima id da minha DB porém ela não fica ativa.
      a ultima id só é exibida se o form tiver sido enviado.
      ↓table aonde é exibida a Insert_id
      <table class="table table-dark" method="POST" action="processa.php"> <thead> <tr> <th scope="col">#</th> <th scope="col">Ultimo ID</th> </tr> </thead> <tbody> <tr> <th scope="row">1</th> <td> <?php if(isset($_SESSION['id'])){ echo $_SESSION['id']; } ?></td> </tr> </tbody> </table> Agora a conexao.php
      <?php session_start(); $servidor = "localhost"; $usuario = "root"; $senha = ""; $dbname = "contas"; //Criar a conexao $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING); $face = filter_input(INPUT_POST, 'face', FILTER_SANITIZE_STRING); $numeros = filter_input(INPUT_POST, 'numeros', FILTER_SANITIZE_STRING); //echo "Nome: $nome <br>"; //echo "E-mail: $email <br>"; $result_usuario = "INSERT INTO usuarios (nome, face, numeros, created) VALUES ('$nome', '$face', '$numeros', NOW())"; if ($conn->query($result_usuario) === TRUE) { $id = $conn->insert_id; $_SESSION['id'] = "" . $id; } else { echo "Error: " . $result_usuario . "<br>" . $conn->error; } $resultado_usuario = mysqli_query($conn, $result_usuario); if(mysqli_insert_id($conn)){ $_SESSION['msg'] = "<div class='alert alert-success' role='alert'> Parabéns agora você está participando! </div>"; header("Location: index.php"); }else{ $_SESSION['msg'] = "<div class='alert alert-danger' role='alert'> OPS! Parece que você já está participando, espere por outro sorteio e volte! </div>"; header("Location: index.php"); }  
    • By lUANZIKA3
      Olá boa tarde, tenho uma form que pega os dados via POST funcionando corretamente, porém eu quero pegar somente o ultimo insert_id do banco de dados e exibir na pagina inicial só que não estou conseguindo, alguém por favor poderia me dar uma dica?
      codes↓
      ACTION="processa"
      processa.php
      <?php session_start(); include_once("conexao.php"); $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING); $face = filter_input(INPUT_POST, 'face', FILTER_SANITIZE_STRING); $numeros = filter_input(INPUT_POST, 'numeros', FILTER_SANITIZE_STRING); //echo "Nome: $nome <br>"; //echo "E-mail: $email <br>"; $result_usuario = "INSERT INTO usuarios (nome, face, numeros, created) VALUES ('$nome', '$face', '$numeros', NOW())"; $resultado_usuario = mysqli_query($conn, $result_usuario); if(mysqli_insert_id($conn)){ $_SESSION['msg'] = "<div class='alert alert-success' role='alert'> Parabéns agora você está participando! </div>"; header("Location: index.php"); }else{ $_SESSION['msg'] = "<div class='alert alert-danger' role='alert'> OPS! Parece que você já está participando, espere por outro sorteio e volte! </div>"; header("Location: index.php"); }  
      conexao.php
      <?php $servidor = "localhost"; $usuario = "id12363089_dados"; $senha = "37875199"; $dbname = "id12363089_dados"; //Criar a conexao $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); INDEX.PHP
      <?php session_start(); ?> <?php if(isset($_SESSION['msg'])){ echo $_SESSION['msg']; unset($_SESSION['msg']); } ?> <img src="giftcard.png" class="rounded mx-auto d-block" alt="Gift Card 50 Reais"> <br> <form method="POST" action="processa.php"> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroup-sizing-default">Seu Nome</span> </div> <input type="text" name="nome" class="form-control" aria-label="Exemplo do tamanho do input" aria-describedby="inputGroup-sizing-default"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="basic-addon3">face, insta ou email para contato/</span> </div> <input type="text" name="face" class="form-control" id="basic-url" aria-describedby="basic-addon3"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroup-sizing-default">3 Pares de Numeros de 0 a 1000 EX: 10.20.30</span> </div> <input type="text" name="numeros" class="form-control" aria-label="Exemplo do tamanho do input" aria-describedby="inputGroup-sizing-default"> </div> <input type="submit" class="btn btn-success btn-lg btn-block"value="Participar do Sorteio"> <table class="table table-dark"> <thead> <tr> <th scope="col">#</th> <th scope="col">First</th> <th scope="col">Last</th> <th scope="col">ULTIMO ID</th> </tr> </thead> <tbody> <tr> <th scope="row">1</th> <td>Mark</td> <td>Otto</td> <td>AONDE EU QUERO INSERIR O ULTIMO ID</td> </tr> </tbody> </table>  
    • By lUANZIKA3
      Olá boa tarde, tenho uma form que pega os dados via POST funcionando corretamente, porém eu quero pegar somente o ultimo insert_id do banco de dados e exibir na pagina inicial só que não estou conseguindo, alguém por favor poderia me dar uma dica?
      codes↓
      ACTION="processa"
      processa.php
      <?php session_start(); include_once("conexao.php"); $nome = filter_input(INPUT_POST, 'nome', FILTER_SANITIZE_STRING); $face = filter_input(INPUT_POST, 'face', FILTER_SANITIZE_STRING); $numeros = filter_input(INPUT_POST, 'numeros', FILTER_SANITIZE_STRING); //echo "Nome: $nome <br>"; //echo "E-mail: $email <br>"; $result_usuario = "INSERT INTO usuarios (nome, face, numeros, created) VALUES ('$nome', '$face', '$numeros', NOW())"; $resultado_usuario = mysqli_query($conn, $result_usuario); if(mysqli_insert_id($conn)){ $_SESSION['msg'] = "<div class='alert alert-success' role='alert'> Parabéns agora você está participando! </div>"; header("Location: index.php"); }else{ $_SESSION['msg'] = "<div class='alert alert-danger' role='alert'> OPS! Parece que você já está participando, espere por outro sorteio e volte! </div>"; header("Location: index.php"); }  
      conexao.php
      <?php $servidor = "localhost"; $usuario = "id12363089_dados"; $senha = "37875199"; $dbname = "id12363089_dados"; //Criar a conexao $conn = mysqli_connect($servidor, $usuario, $senha, $dbname); INDEX.PHP
      <?php session_start(); ?> <?php if(isset($_SESSION['msg'])){ echo $_SESSION['msg']; unset($_SESSION['msg']); } ?> <img src="giftcard.png" class="rounded mx-auto d-block" alt="Gift Card 50 Reais"> <br> <form method="POST" action="processa.php"> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroup-sizing-default">Seu Nome</span> </div> <input type="text" name="nome" class="form-control" aria-label="Exemplo do tamanho do input" aria-describedby="inputGroup-sizing-default"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="basic-addon3">face, insta ou email para contato/</span> </div> <input type="text" name="face" class="form-control" id="basic-url" aria-describedby="basic-addon3"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text" id="inputGroup-sizing-default">3 Pares de Numeros de 0 a 1000 EX: 10.20.30</span> </div> <input type="text" name="numeros" class="form-control" aria-label="Exemplo do tamanho do input" aria-describedby="inputGroup-sizing-default"> </div> <input type="submit" class="btn btn-success btn-lg btn-block"value="Participar do Sorteio"> <table class="table table-dark"> <thead> <tr> <th scope="col">#</th> <th scope="col">First</th> <th scope="col">Last</th> <th scope="col">ULTIMO ID</th> </tr> </thead> <tbody> <tr> <th scope="row">1</th> <td>Mark</td> <td>Otto</td> <td>AONDE EU QUERO INSERIR O ULTIMO ID</td> </tr> </tbody> </table>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.