Ir para conteúdo

POWERED BY:

Arquivado

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

leo_SJCampos

Delimitador no Explode

Recommended Posts

Galera tenho que fazer um explode para quebrar uma sequência de números em dois em dois, só que não sei qual delimitador usar, pois nessa sequencia vem um numero inteiro. Após isso, preciso gravar em uma tabela cada bloco em que for quebrado.. como que eu posso fazer isso?

 

$sequencia = "5657345835363730";

$parte = explode(" ", $sequencia );
$i=0;
for($i; $i<sizeof($parte); $i++) {
    echo $parte[$i]."<br>";
		
}
Esse codigo nao esta funcionando porque não há um delimitador no Explode, o que eu coloco la? preciso dividir esse nunmero de dois em dois.

 

56

57

34

58

35

36

37

30

Compartilhar este post


Link para o post
Compartilhar em outros sites

quebrar uma sequência de números em dois em dois

Isso deve resolver:

 

$sequencia = '5657345835363730';

$partes = preg_split( sprintf( '/(\d{%d})/' , floor( strlen( $sequencia ) / 2 ) ) , $sequencia , 0 , PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );

foreach ( $partes as $parte ){
echo $parte , PHP_EOL;
}

 

Saída:

56573458

35363730

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade não é dessa forma que eu queria dividir, quando eu disse "dois em dois" é pegar um numero e dividi-lo em várias partes com 2 digitos (56 57 34 58 35 36 37 30)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, entendi errado.

 

Agora deve resolver:

 

$sequencia = '5657345835363730';

$partes = preg_split( '/(\d{2})/' , $sequencia , 0 , PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );

foreach ( $partes as $parte ){
echo $parte , PHP_EOL;
}

 

Saída:

56

57

34

58

35

36

37

30

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

legal assim funciona. Só mais uma dúvida. com explode eu conseguia jogar o valor do array dentro de um for/while e ir inserindo registro por registro no banco, dessa forma, como eu teria que fazer? tenho que utilizar essa constante PHP_EOL para identificar os blocos de numeros?

Compartilhar este post


Link para o post
Compartilhar em outros sites

legal assim funciona. Só mais uma dúvida. com explode eu conseguia jogar o valor do array dentro de um for/while e ir inserindo registro por registro no banco, dessa forma, como eu teria que fazer? tenho que utilizar essa constante PHP_EOL para identificar os blocos de numeros?

 

Sim, você pode fazer.

 

O PHP_EOL é uma constante do PHP, ostensivamente usada pra localizar o caractere de nova linha.

 

Como você já está dentro de um loop foreach, feito pelo João, bastaria executar uma instrução SQL dentro do laço e inserir os registros no banco.

 

Ou então, pra não ter que fazer várias instruções, concatene os valores em uma string e execute-a depois em uma query.

 

Entendeu?

 

Utilizando o código feito pelo João:

 

$sequencia = '5657345835363730';

$partes = preg_split( '/(\d{2})/' , $sequencia , 0 , PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );

$string = "";

foreach ( $partes as $parte ){
 echo $parte , PHP_EOL;
 $string .= $parte.", ";
}// Agora bastaria colocar essa string em uma instrução. Por exemplo:

mysql_query("INSERT INTO tabela (COLUNA)
VALUES ($string);

Não estou certo se realmente funcionaria, mas tente algo parecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre o primeiro problema, por que não simplificar com str_split():

 

str_split( '5657345835363730', 2 )

 

Já o segundo, por que não evitar um loop, com implode():

 

$value = implode( ', ', str_split( '5657345835363730', 2 ) );

Viu? Numa linha só. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

como que eu vou evitar um loop usando o implode, sendo que eu preciso gravar cada dupla de registro como um registro no banco?

 

56 - um registro

57 - outro registro

34 - outro registro ....

 

Entendeu? não vejo como fazer isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

como que eu vou evitar um loop usando o implode,

Simples:

 

<?php
$sequencia = '5657345835363730';
$partes = preg_split( '/(\d{2})/' , $sequencia , 0 , PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );

mysql_query( sprintf( 'INSERT INTO tabela (COLUNA) VALUES(%s);' , implode( '),(' , $partes ) ) );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou pode adaptar esse último código para não precisar de preg_split(), usando str_split()

 

Essa "birra" é que, certa vez comigo, a flag PREG_SPLIT_NO_EMPTY conseguiu retornar índices em vazios, quebrando meu SQL. Mas não me lembro exatamente como foi <_<

 

Só um complemento. Se, você quiser manter a ER, mas quiser poder usar letras nessa divisão, bastaria trocar o \d por \w.

 

P.S.: implode parece uma funçãozinha boba, mas às vezes chega a arrepiar. :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou pode adaptar esse último código para não precisar de preg_split(), usando str_split()

 

<?php
$sequencia = '5657345835363730';
$partes = str_split( $sequencia , 2 );

mysql_query( sprintf( 'INSERT INTO tabela (COLUNA) VALUES(%s);' , implode( '),(' , $partes ) ) );

 

Ta ai... :D

 

Essa "birra" é que, certa vez comigo, a flag PREG_SPLIT_NO_EMPTY conseguiu retornar índices em vazios, quebrando meu SQL. Mas não me lembro exatamente como foi

 

Pena você não se lembrar, eu realmente gostaria de ver isso...

 

P.S.: implode parece uma funçãozinha boba, mas às vezes chega a arrepiar.

 

implode() não tem nada de boba, na verdade, se bem utilizada, faz coisas fantásticas !!!

 

EDIT: Se não me engano, postei aqui uma vez um código de 1 linha que criava uma tabela HTML inteira, usando printf() com implode()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por isso disse que apenas parece boba. Porque, por definição, muitos apenas a interpretam como uma função para unir elementos de um array em uma string, mas assim como outras funções do PHP, se combinada da forma adequada, faz em uma linha o que um pogramador faria em umas 5 ou 6...

 

Vou cavar meu pen drive e ver se acho esse caso da PREG_SPLIT_NO_EMPTY. Eu lembrei o que era, mas não sei se ainda tenho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

voces poderiam me explicar melhor essa forma de substituir um loop pelo implode? tentei fazer aqui mais deu um erro aqui....

e outra, eu tenho mais campos nessa tabela, como eu faria isso?

 

pg_exec( sprintf( 'INSERT INTO dtcar (carencia) VALUES(%s);' , implode( '),(' , $partes ) ) );

erro:

Warning: pg_exec() [function.pg-exec]: Query failed: ERRO: erro de sintaxe em ou pr�ximo a "," at character 40 in /sites/empresa/php/teste.php on line 21

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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