Ir para conteúdo

POWERED BY:

Arquivado

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

Marcos Moraes

[Resolvido] Desvendar código

Recommended Posts

Olá, estou querendo pegar um certo texto dentro de uma variável.

Não sei se esse é o lugar certo para postar. Pesso desculpas se estou postando em lugar errado !

 

Segue o texto da variável:

a:3:{i:6;s:10:"1292341143"; i:5;s:10:"1292341110"; i:4;s:10:"1292340274";}

 

Queria pegar o número que está nas partes grifadas de vermelho

i:6 i:5 e i:4 e assim sucesivemante sempre pegar o número grifado ao lado em azul no texto da variável setada acima.

 

Alguem pode me ajudar ? Obrigado e Deus abençoe a todos da IMASTER !

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://br2.php.net/manual/pt_BR/function.json-decode.php

 

EDIT

 

Olhei melhor essa string e ela se parece muito com JSON, mas ela não está bem formada como JSON. Talvez não irá funcionar a função que eu indiquei.

De onde vem essa string?

 

Está variavel sempre tem o mesmo número de caracteres?

 

Já estava pensando em usar substr()? rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo se a variavel tiver sempre o mesmo tamanho estava penssando em indicar substr() rs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos usar algumas funções básicas do PHP. Está tudo comentado.

 

<?php
//Variável que pode vir por GET ou POST
$var = 'a:3:{i:6;s:10:"1292341143"; i:5;s:10:"1292341110"; i:4;s:10:"1292340274";}';
//Pega o valor do 3º caractere
$rep = substr($var, 2, 1);
//Procura por todos os ";" e separa em um array
$exp = explode(';', $var);
//Conta o número de registros encontrados
$count = count($exp);
//Remove o que sobrou
$remove = array("a:$rep:{",'i:');
//Loop
for($i=0; $i < $count; $i++){
//Se encontrar "i:" escreve o valor. Se não encontrar, não escreve nada.
echo (preg_match('/i:/', $exp[$i])) ? str_replace($remove, '', $exp[$i]).'<br/>' : '';
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, isso não é nenhum bicho de sete cabeças.

 

Isso que postou nada mais é do que a representação de um array em forma de string.

 

O nome do processo é serialização, e é feito através da função serialize().

 

E para desfazer, isto é, retornr essa string ao array original, basta des-serializar, com unserialize()

 

IMPORTANTE: Se passar essa string para unserialize() mantendo os espaços existentes antes de cada parte destacada em vermelho, não funcionará.

 

Agora, sua real dúvida, que seria pegar os termos destacados, basta usar um foreach:

 

$array = unserialize( 'a:3:{i:6;s:10:"1292341143";i:5;s:10:"1292341110";i:4;s:10:"1292340274";}' );

foreach( $array as $key => $value ) {

   var_dump( $key, $value );
}

Isso retornaria algo como:

 

int 6

 

string '1292341143' (length=10)

 

int 5

 

string '1292341110' (length=10)

 

int 4

 

string '1292340274' (length=10)

Os números são os valores daquelas letras i e os outros números são aquilo que tem após os s10, que são os valores dos índices.

 

Obs.: "Algo como" porque só vai sair desse mesmo jeito se sua instalação do PHP tiver a xDebug instalada e habilitada, o que modifica a saída de var_dump()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me desculpe jcalebe, mas o código que postou é pura gambiarra.

 

Pode até ser gambiarra, mas funciona.

"No desespero, urubu é frango!!!" :)

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.