Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?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 IFOi 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);>
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'
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.
>
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;
}
}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);
>
2 horas atrás, marcosmarcolin disse:
str_replace("'null'", null, $valores);
tentei dessa forma, não resolveuVocê 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 );>
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.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
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.
>
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***/profile/118098-andr%C3%A9-severino/?do=hovercard" data-mentionid="118098" href="/profile/118098-andr%C3%A9-severino/" rel="">@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;
}*/
}