Jump to content

Recommended Posts

tenho array que está sendo preenchido assim:

$dados = array([0] => "Nome",[1] => "SobreNome",[2] => "null");

queria que ficasse dessa forma:

$dados = array([0] => "Nome",[1] => "SobreNome",[2] => null);

pois estou extraindo os valores do array com array_values  pra colocar em um INSERT, os campos que podem ser null são do tipo date(BD mysql),

então tenho que retirar as aspas quando o valor vier null , ou no próprio array, ou após o array_values, alguma sugestão?  

Share this post


Link to post
Share on other sites
<?php

$dados = array('Nome', 'SobreNome', 'null');

$novoArray = [];
foreach ($dados as $item){
    if ($item === 'null'){
        $item = null;
    }
    $novoArray[] = $item;
}

print_r($novoArray);

 

Share this post


Link to post
Share on other sites

não consegui chegar ao resultado esperado, esse array, tipo, tenho isso (não é um array):

$valores = 'Nome','SobreNome','null';

monto assim:

explode(",",$valores);

quando coloco no foreach ele não entra no IF

 

 

Share this post


Link to post
Share on other sites

Oi boa noite, esse trecho que você postou vai acarretar em um erro:

 

$valores = 'Nome','SobreNome','null';

Estou supondo que a variável $valores corresponde a uma string e que você utiliza junto com o explode() para montar o seu array e depois para fazer o tratamento, sugiro a utilização de uma função ficaria algo como:

<?php 

    function verificaNomeNull($string) {
        $array = explode(',', $string);
        $novoArray = array();

        foreach( $array as $valor )
            $novoArray[] = (mb_strtolower(trim($valor)) == 'null') ? NULL : trim($valor);

        return $novoArray;
    }

    $nomes = 'Nome, Sobrenome1, Sobrenome2, null, NULL, nUlL';

    $array = verificaNomeNull($nomes);
    
    var_dump($array);

 

 

Share this post


Link to post
Share on other sites
13 minutos atrás, André Severino disse:

Oi boa noite, esse trecho que você postou vai acarretar em um erro:

 


$valores = 'Nome','SobreNome','null';

Estou supondo que a variável $valores corresponde a uma string e que você utiliza junto com o explode() para montar o seu array e depois para fazer o tratamento, sugiro a utilização de uma função ficaria algo como:


<?php 

    function verificaNomeNull($string) {
        $array = explode(',', $string);
        $novoArray = array();

        foreach( $array as $valor )
            $novoArray[] = (mb_strtolower(trim($valor)) == 'null') ? NULL : trim($valor);

        return $novoArray;
    }

    $nomes = 'Nome, Sobrenome1, Sobrenome2, null, NULL, nUlL';

    $array = verificaNomeNull($nomes);
    
    var_dump($array);

 

 

 Esse valores $valores = 'Nome','SobreNome','null'; é a extração de um array : 

implode(" ',' ", array_values($dados))

estou deixando nesse formato, só que quando valor for null  não pode conter 'aspas simples'

Share this post


Link to post
Share on other sites

Santos, posta o exemplo inteiro que é mais fácil de acharmos a solução, pra mim está confuso.

 

E como o André disse acima, a forma que está gerando sua string acarretará em erro.

Share this post


Link to post
Share on other sites
3 horas atrás, marcosmarcolin disse:

Santos, posta o exemplo inteiro que é mais fácil de acharmos a solução, pra mim está confuso.

 

E como o André disse acima, a forma que está gerando sua string acarretará em erro.

 

estou cadastrando dessa forma. os valores estão sendo concatenados com aspas simples.

public function Cadastro(array $dados, $tabela ){        
    $campos  = implode(", ", array_keys($dados) );
    $valores = "'" . implode( "', '", array_values($dados) ) . "'";
    $stmt = $this->pdo->prepare( "INSERT INTO {$tabela} ({$campos}) VALUES ({$valores})" );
    if($stmt->execute()){
        $this->idPessoa = $this->pdo->lastInsertId();
        return true; 
    }else{
        $this->erro = "Erro !!";
        return false; 
    }
}

 

Share this post


Link to post
Share on other sites

Cara, única de forma de resolver é você percorrer a sua variável/array antes de inserir, procurar a string e substituir, pode utilizar str_replace.

 

Ex se for uma string, se for array você terá que percorrê-lo.

str_replace("'null'", null, $valores);

 

Share this post


Link to post
Share on other sites
2 horas atrás, marcosmarcolin disse:

str_replace("'null'", null, $valores);

tentei dessa forma, não resolveu

Share this post


Link to post
Share on other sites

Você consegue add essa função ou em outro caso colocar dentro da sua classe e depois tratar os array_keys() e array_values() como no exemplo:

 

<?php

  function verificaNomeNull($array) {
      $novoArray = array();

      $qtd = is_array($array) ? count($array) : 0;
      for( $i=0; $i<$qtd; $i++ )
          $novoArray[] = ((mb_strtolower(trim($array[$i])) == 'null') || (trim($array[$i]) == '')) ? NULL : trim($array[$i]);

      return $novoArray;
  }

  $array = array('Nome', 'Sobrenome', 'Sobrenome2', 'Null', 'NULL', 'nUlL', ''); // array_values()
  $novosValores = verificaNomeNull($array); // verificaNomeNull( array_values($dados) ) || ou add na classe como protected ... dps chama com $this->verificaNomeNull($array)


  var_dump( $novosValores );

 

Share this post


Link to post
Share on other sites
18 horas atrás, André Severino disse:

Você consegue add essa função ou em outro caso colocar dentro da sua classe e depois tratar os array_keys() e array_values() como no exemplo:

 


<?php

  function verificaNomeNull($array) {
      $novoArray = array();

      $qtd = is_array($array) ? count($array) : 0;
      for( $i=0; $i<$qtd; $i++ )
          $novoArray[] = ((mb_strtolower(trim($array[$i])) == 'null') || (trim($array[$i]) == '')) ? NULL : trim($array[$i]);

      return $novoArray;
  }

  $array = array('Nome', 'Sobrenome', 'Sobrenome2', 'Null', 'NULL', 'nUlL', ''); // array_values()
  $novosValores = verificaNomeNull($array); // verificaNomeNull( array_values($dados) ) || ou add na classe como protected ... dps chama com $this->verificaNomeNull($array)


  var_dump( $novosValores );

 

 vou ver e testar.

 

Share this post


Link to post
Share on other sites

Se não funcionar a ideia do André, peço que poste a estrutura do array $dados que está chegando na função Cadastro, que aí eu faço testes aqui. Dá um echo '<pre>'; print_r($dados); e posta aqui daí. Vamos resolver isso aí rsrs

Share this post


Link to post
Share on other sites

não tive tempo de fazer uma verificação a fundo, só coloquei:

verificaNomeNull( array_values($dados) )

não me retornou nada, vou ver depois com mais calma, mas pelo que percebi superficialmente a função espera um array, sendo que quando aplico o array_values() o resultado é uma string, mas como falei vou analisar depois com mais calma e retorno com resultado.

 

Share this post


Link to post
Share on other sites
Em 24/06/2019 at 20:13, marcosmarcolin disse:

Se não funcionar a ideia do André, peço que poste a estrutura do array $dados que está chegando na função Cadastro, que aí eu faço testes aqui. Dá um echo '<pre>'; print_r($dados); e posta aqui daí. Vamos resolver isso aí rsrs

 

o array dados é isso:

 

$dados=[];
$dados['nome_produto']   = $_POST['produto'];
$dados['valor_produto']  = $_POST['valor'];
$dados['tipo_produto']   = $_POST['tipo'];

quando chamo o função cadastro passo o array $dados

Share this post


Link to post
Share on other sites

@André Severino, não obtive resultado com a função acima citada.

 

$dados=[];//preenchendo o array($dados[''] a chave, e $_POST o valor )
$dados['nome_produto']   = $_POST['produto'];
$dados['valor_produto']  = $_POST['valor'];
$dados['tipo_produto']   = $_POST['tipo'];

//função de insert
public function Cadastro(array $dados, $tabela){        
  //  $campos  = implode(", ", array_keys($dados) );
 //   $valores = "'" . implode( "', '", array_values($dados) ) . "'";
   function verificaNomeNull($array) {
      $novoArray = array();

      $qtd = is_array($array) ? count($array) : 0;
      for( $i=0; $i<$qtd; $i++ )
          $novoArray[] = ((mb_strtolower(trim($array[$i])) == 'null') || (trim($array[$i]) == '')) ? NULL : trim($array[$i]);
      return $novoArray;
  }
  echo $novosValores = verificaNomeNull(array_values($dados));

/*$stmt = $this->pdo->prepare( "INSERT INTO {$tabela} ({$campos}) VALUES ({$valores})" );
    if($stmt->execute()){
        $this->idPessoa = $this->pdo->lastInsertId();
        return true; 
    }else{
        $this->erro = "Erro !!";
        return false; 
    }*/
}
//chamando a função inserção
Cadastro(array $dados, 'produtos_cliente' );

 

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 RENATA S P BALSANI
      Declarar e atribuir três variáveis, uma com o seu 'nome', outra com o seu 'sobrenome' e outra com a sua 'idade'. Então, declare uma variável com nome resultado e atribua uma string unindo suas variaveis da seguinte forma: " João Silva terá 30 anos". Respeite os espaços!
       
      A Solução não está rodando:
       
      var nome = "Heitor";
      var sobrenome = "Balsani"
      var idade = 4;
      var tempo ="anos";
      var resultado = (nome + " " + sobrenome + " "+ idade + " " + tempo);
      console.log (resultado);
      //  resultado seria: "Heitor Balsani terá 4 anos"
    • By camisbales
      Olá,
      preciso resolver o seguinte exercício:
      Uma professora de programação, cansada de que os estudantes cheguem tarde, decidiu que vai cancelar a aula se há poucos presentes.
      Ela representa a entrada dos estudantes como um array de tempos de chegada tarde, em minutos. Por exemplo, se um estudante chegou 10 minutos atrasado, outro 5 minutos antes da hora, outro com 3 minutos de atraso, e outro pontual, poderá representar assim:
      var alunosDaSegunda = [10, -5, 3, 0];
      Com essa informação e a quantidade mínima de estudantes para que suceda o curso, a professora quer saber se a aula acontecerá. Por exemplo, supondo que a quantidade mínima de estudantes para que a aula aconteça é de 2 alunos, então o curso da segunda-feira se realizará, porque houve um estudante que foi pontual e um estudante que chegou cedo.
       acontece(alunosDaSegunda, 2)
      true
      Mas se a quantidade mínima fosse 3, a aula não aconteceria:
       acontece(alunosDaSegunda, 3)
      false
      Escreva as seguintes funções: 1. acontece, que diz se a aula sucederá de acordo com o array dos estudantes que entraram. 2. aberturas, que utiliza um array com os arrays dos estudantes que entraram nos outros dias, e a quantidade mínima de estudantes, e diga quais os dias em que as aulas aconteceram e quais não. Por exemplo:
      aberturas([alunosDaSegunda, alunosDaTerça, alunosDaQuarta], 2)
      [true, false, false]
      A seguir o código que eu escrevi e os erros apresentados:
      function acontece (alunosDia, quorum){
          let resultado = [];
          for (let i = 0; i < alunosDia.length; i++){
          if (alunosDia <= 0){
          resultado.push (alunosDia);}
          if (resultado.length >= quorum) {
          return true;}
          }
      }
          
      function aberturas (alunosDia, quorum){
          let resultadoArray = [];
          for (let i = 0; i < alunosDia.length; i++){
          resultadoArray.push(acontece(alunosDia, quorum));
          }
      }
      ERROS
      acontece([10, -5, 3, 0], 4) - deveria retornar false;
       acontece([10, -5, 3, 0], 3 - deveria retornar false;
       aberturas([[0, 0, 3, 0], [1, 2, 4, 5], [0, 0, -1]], 3) - undefined deepEqual [ true, false, true ];
       aberturas([[0, 0, -3, 0], [1, 2, 4, 5], [0, 0, -1]], 4) - undefined deepEqual [ true, false, false ].
       
    • By Falcon33
      [INICIANTE]
      Boa tarde pessoal, estou com problemas para terminar o seguinte código. 
      Preciso adicionar os seguintes procedimentos.
      1.     Utilizar vetores e/ou matrizes;
      2.     Utilizar estruturas de repetição;
      3.     Implementar utilizando modularização (no mínimo um módulo de procedimento e dois módulos de ação);
      4.     Utilizar passagem de parâmetro por valor e referência;
      5.     Utilizar registros;
      6.     Utilizar alocação dinâmica de memória;
       
      Alguém poderia dar uma luz? 
       
      Já fiz o seguinte: 
      //Projeto: Calculo de PI por Monte Carlo. Adotando o intervalo entre [0,1]. #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> int main(){ double px,py,deltax,deltay,DistEuc,Valor_pi; int Npont_quad = 10000000; int dentro_circ = 0; int i; srand(time(NULL)); for(i = Npont_quad; i > 0; i--){ //Estrutura de repetição para gerar pontos aleatorios. px = rand() / (double)RAND_MAX; //Primeiro numero sorteado entre 0 e 1. py = rand() / (double)RAND_MAX; //Segundo numero sorteado entre 0 e 1. deltax = pow((px- 0.5),2); //Calculo do cateto x da hipotenusa. deltay = pow((py - 0.5),2); //Calculo do cateto y da hipotenusa. DistEuc = sqrt(deltax + deltay); //Calculo da distancia euclidiana(distancia entre os pontos) if (DistEuc <= 0.5){ //Determinar quais pontos estão dentro do circulo dentro_circ++; } } Valor_pi = 4 * dentro_circ / (double) Npont_quad; //Obtenção do valor de PI. printf("O valor de PI eh: %lf", Valor_pi); //Imprimir o valor de PI. }  
    • By Cleudiney T Brandão
      Pessoal alguém me dá uma ajuda com Mysql por favor.
      Tenho uma coluna em meu BD que precisaria o seguinte: 
      Ela não é obrigatória mas se preenchida não poderia ter outras ocorrências dela.
      É um campo que ao meu ver seria UNIQUE mas que aceitasse NULL.
    • By Cleudiney T Brandão
      Pessoal alguém me dá uma ajuda com Mysql por favor.
      Tenho uma coluna em meu BD que precisaria o seguinte: 
      Ela não é obrigatória mas se preenchida não poderia ter outras ocorrências dela.
      É um campo que ao meu ver seria UNIQUE mas que aceitasse NULL.
×

Important Information

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