Jump to content
Santos_2015

remover aspas array [RESOLVIDO]

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 Gustavuh
      Boa tarde.
       
      Estou carregando os dados do usuário numa session.
       
      Na página de redirecionamento, jogo essa session para uma váriável.
       
      Quero por BEM VINDO, {nome_do_usuario}, mas aparece o erro UNDEFINED INDEX: USER_NAME.
       
      Segue codigo...
       
      if(!isset($_SESSION['userlogin'])){ unset($_SESSION['userlogin']); header("Location: index.php"); exit; }else{$userlogin = $_SESSION['userlogin'];} <img src="images/user.png" alt=""> <span> Bem vindo(a), <strong style="font-style: italic;"><?= $userlogin['user_apelido']; ?></strong></span> Como resolver esse caso tão simples?

    • By agodiniz
      Fala galera, estou com um problema e não sei como resolver. Até encontrei umas respostas, mas utilizando Php e Mysql. Preciso que a resposta seja utilizando as tecnologias javascript (node) e Mysql.
      Gostaria de capturar dados de um formulário utilizando array e salvando o mesmo num banco de dados.
       
      Ex:
      Imagine um 3 inputs do tipo text que recebem um valor que é inserido pelo cliente e que cada input, possa receber valores diferentes (como se cada um fosse uma variável 'titulo', 'conteudo' e 'autor')
      quero que depois que o cliente enviar os dados que por ele foram inputados, esses dados sejam enviados para as variáveis 'titulo', 'conteudo' e 'autor'.
      Logo depois quero declarar um array que receba essas variáveis [titulo, conteudo, autor] e desejo armazenar o array no banco de dados utilizando Mysql
       
      Desde já, agradeço!
    • By Omar~
      É o seguinte, tenho uma tabela de produtos a qual além de possuir características do produto já contém a coluna para o link da mesma.
      Assim sendo faço a consulta da tabela para preencher um menu com o link para cada produto, e é aqui que entra a questão:
       
      Na sua opinião o que seria mais viável ao usuário acessar um produto em questão?
      Reaproveitar o array de retorno da query ao qual usei para compor os links do menu, só que filtrar esse array mostrando o índice ao qual é acessado. Refazer a query listando somente o produto.  
      A aplicação é executada em um único arquivo.
      Onde tenho o menu HTML listando cada produto contido na tabela (A qual também guarda as demais informações do produto).
       
      Reaproveitar a query ficou meio estranho uma vez que tenho um array multi dimencional da query tenho que buscar o índice para ver se ele existe e ainda varrer o array para poder usar os dados do produto tipo assim:
      <?php // $url[1] : É o valor vindo da url // $result : É o array multi de resultado da query if (array_search($url[1], array_column($result, 'ap_link')) !== false) { foreach ($result as $value) { if ($url[1] == $value->ap_link) { // Existe o produto e a url é a mesma do link do produto break; } } } else { // O valor da url não condiz com nenhum produto registrado } Essa alternativa evita uma segunda query desnecessária aliviando o lado do SQL, porém em um arrray multo extenso pode haver lentidão para processar os dados.
      Por outro lado também ficar refazendo consultas também pode deixar a questão meio lenta.
       
      A coisa toda é porque existem centenas de produtos na tabela e em ambos os casos está demorando mais do que deveria.
      Então bateu essa dúvida, qual alternativa tomar, resolvi perguntar, pois várias cabeças peçam melhor que uma.
    • By aegospm
      Olá, amigos.  Eu tenho um array ($array) que foi gerado automaticamente no meu código e seu retorno é este:
      Array ( [0] => Array ( [em] => 0.017142857142857 [vítimas] => 0.017142857142857 [na] => 0.017142857142857 [mulheres] => 0.017142857142857 [criança] => 0.011428571428571 [jovem] => 0.011428571428571 [o] => 0.011428571428571 [nada.] => 0.011428571428571 [morreram] => 0.011428571428571 [hora.] => 0.011428571428571 ) [1] => Array ( [e] => 0.024096385542169 [O] => 0.018072289156627 [anos,] => 0.018072289156627 [do] => 0.018072289156627 [sem] => 0.012048192771084 [atiraram] => 0.012048192771084 [levar] => 0.012048192771084 [Amarante,] => 0.012048192771084 [Natal.] => 0.012048192771084 [com] => 0.012048192771084 ) [2] => Array ( [e] => 0.021276595744681 [de] => 0.021276595744681 [As] => 0.015957446808511 [do] => 0.015957446808511 [um] => 0.015957446808511 [uma] => 0.015957446808511 [Duas] => 0.01063829787234 [identificado] => 0.01063829787234 [cinco] => 0.01063829787234 [18] => 0.01063829787234 ) [3] => Array ( [acordo] => 0.014084507042254 [até] => 0.014084507042254 [De] => 0.014084507042254 [Nascimento,] => 0.014084507042254 [os] => 0.014084507042254 [com] => 0.014084507042254 [na] => 0.014084507042254 [branco,] => 0.0070422535211268 [carro] => 0.0070422535211268 [em] => 0.0070422535211268 ) [4] => Array ( [a] => 0.030769230769231 [de] => 0.025641025641026 [no] => 0.020512820512821 [foi] => 0.015384615384615 [Polícia] => 0.015384615384615 [o] => 0.015384615384615 [26] => 0.01025641025641 [Rodrigues] => 0.01025641025641 [Kelly] => 0.01025641025641 [cabeças] => 0.01025641025641 ) )  
      Eu tenho imprimir cada elemento assim:
      foreach ($array as $key => $value) { echo $key." => ".$value."<br/>"; } Obtenho como resultado o seguinte erro:
      Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 901 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 902 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 901 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 902 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 901 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 902 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 901 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 902 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 901 Array Notice: Array to string conversion in /home/u244186567/public_html/index.php on line 902 Array  Vi aqui como última solução, pois não consegui resolver. Já pesquisei bastante. Como faço para imprimir separadamente cada elemento de $array?
      Quero trabalhar com eles separadamente.
       
       
      Já resolvi... meu $array é um array de arrays. :)
×

Important Information

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