• 0
Sign in to follow this  
Certa Soluções

Identificar palavras dentro de uma variavel STRING

Question

Pessoal, estou tendo que comunicar PHP com asterisk, que é um sistema de central telefonica para linux.

A comunicação eu já fiz, e tenho como retorno uma variavel que trato ele assim:

nl2br($ast->getQueues())

Uso o nl2br para dar as quebras de linhas.

O conteudo é assim:

Message: Queue summary will follow

Event: QueueSummary

Queue: Suporte

LoggedIn: 0

Available: 0

Callers: 0

HoldTime: 3

TalkTime: 45

LongestHoldTime: 0

Event: QueueSummaryComplete

Event: Newchannel

Privilege: call,all

Channel: SIP/559101001-00000134

ChannelState: 0

ChannelStateDesc: Down

CallerIDNum: 559106182

CallerIDName: Ademir

AccountCode:

Exten: s

Context: default

Uniqueid: 1338221269.469

O que preciso é identificar alguns desses resultados e trata-los para inserir no banco de dados ou simplesmente listar de forma individual na tela.

Por exemplo: ChannelStateDesc: Identificar somente o valor dele, que seria Down.

Assim quer fazer com outros dados como Uniqueid, Channel etc.

É possivel?

Share this post


Link to post
Share on other sites

8 answers to this question

Recommended Posts

  • 0

O que você pode fazer é algo parecido com isso:

// Separo a string pelas quebras de linha
$strings = explode("\n",$ast->getQueues());

// Crio um array vazio que será usado pelo laço
$valores = array();

// Faço o laço separando cada item do array pelo caractere : e salvando em um outro array
foreach($strings as $string){
    if(strlen($string) > 1){
        $str = explode(':',$string);
        $valores[trim($str[0])] = trim($str[1]);
    }
}
Fiz esse código só pra ilustrar, está um pouco rudimentar e pode ser muito melhorado, é só pra você saber por onde seguir. Dessa forma você terá um array onde as chaves são as propriedades e os valores, os resultados.
Array
(
    [Message] => Queue summary will follow
    [Event] => Newchannel
    [Queue] => Suporte
    [LoggedIn] => 0
    [Available] => 0
    [Callers] => 0
    [HoldTime] => 3
    [TalkTime] => 45
    [LongestHoldTime] => 0
    [Privilege] => call,all
    [Channel] => SIP/559101001-00000134
    [ChannelState] => 0
    [ChannelStateDesc] => Down
    [CallerIDNum] => 559106182
    [CallerIDName] => Ademir
    [AccountCode] => 
    [Exten] => s
    [Context] => default
    [Uniqueid] => 1338221269.469
)

Edited by MLeandroJr!

Share this post


Link to post
Share on other sites
  • 0

Veja se é isso que você quer:

str_replace($_REQUEST["BuscarPalavras"],"<span style='color:#00F'>".$_REQUEST["BuscarPalavras"]."</span>",$listar->PalavrasBanco);

Abs.

Edited by MTavares

Share this post


Link to post
Share on other sites
  • 0
O que você pode fazer é algo parecido com isso:

// Separo a string pelas quebras de linha
$strings = explode("\n",$ast->getQueues());

// Crio um array vazio que será usado pelo laço
$valores = array();

// Faço o laço separando cada item do array pelo caractere : e salvando em um outro array
foreach($strings as $string){
    if(strlen($string) > 1){
        $str = explode(':',$string);
        $valores[trim($str[0])] = trim($str[1]);
    }
}
Fiz esse código só pra ilustrar, está um pouco rudimentar e pode ser muito melhorado, é só pra você saber por onde seguir. Dessa forma você terá um array onde as chaves são as propriedades e os valores, os resultados.
Array
(
    [Message] => Queue summary will follow
    [Event] => Newchannel
    [Queue] => Suporte
    [LoggedIn] => 0
    [Available] => 0
    [Callers] => 0
    [HoldTime] => 3
    [TalkTime] => 45
    [LongestHoldTime] => 0
    [Privilege] => call,all
    [Channel] => SIP/559101001-00000134
    [ChannelState] => 0
    [ChannelStateDesc] => Down
    [CallerIDNum] => 559106182
    [CallerIDName] => Ademir
    [AccountCode] => 
    [Exten] => s
    [Context] => default
    [Uniqueid] => 1338221269.469
)

Entendi, porém, "os valores, os resultados" serão dinamicos e irão mudar a cada 10 segundos ou a cada atualização de pagina. Por isso precisarei pegar eles como se fossem variaveis

Exemplo $Uniqueid e dar um echo $Uniqueid ou echo $ChannelState. Será que tem como?

Share this post


Link to post
Share on other sites
  • 0

Se você der um echo em $valores['Uniqueid'], ele sempre te retornará o valor que ele pegou do $ast->getQueues().

Dessa forma, os valores são dinâmicos.

Mas com um ajuste ou outro o código transforma tudo em variável.

Edited by MLeandroJr!

Share this post


Link to post
Share on other sites
  • 0
Se você der um echo em $valores['Uniqueid'], ele sempre te retornará o valor que ele pegou do $ast->getQueues().

Dessa forma, os valores são dinâmicos.

Mas com um ajuste ou outro o código transforma tudo em variável.

CERTO!

MATOU A CHARADA... era exatamente isso que precisava. Fico muito grato pela ajuda.

Obrigado mesmo!

Você não faz consultoria paga? Temos interesse.

Veja se é isso que você quer:

str_replace($_REQUEST["BuscarPalavras"],"<span style='color:#00F'>".$_REQUEST["BuscarPalavras"]."</span>",$listar->PalavrasBanco);

Abs.

O metodo do MLeandroJr deu certo. Mas mesmo assim agradeço o interesse em ajudar.

Share this post


Link to post
Share on other sites
  • 0

Modifiquei o código para retornar as propriedades como nomes de variáveis.

Assim fica da forma que você havia dito.

// Separo a string pelas quebras de linha
$strings = explode("\n",$ast->getQueues());

// Crio um array vazio que será usado pelo laço
$valores = array();

// Faço o laço separando cada item do array pelo caractere : e salvando em um outro array
foreach($strings as $string){
    if(strlen($string) > 1){
        $str = explode(':',$string);
        $$str[0] = trim($str[1]);
    }
}

Com este código, se você der um echo em $ChannelState, por exemplo, ele retorna o valor capturado.

A desvantagem deste método é não poder ter certeza das variáveis criadas, enquanto com a array, você pode saber facilmente dando um print_r() nela.

Quanto à consultoria, podemos conversar.

Meu email de contato é: [email protected]

Share this post


Link to post
Share on other sites
  • 0
Modifiquei o código para retornar as propriedades como nomes de variáveis.

Assim fica da forma que você havia dito.

// Separo a string pelas quebras de linha
$strings = explode("\n",$ast->getQueues());

// Crio um array vazio que será usado pelo laço
$valores = array();

// Faço o laço separando cada item do array pelo caractere : e salvando em um outro array
foreach($strings as $string){
    if(strlen($string) > 1){
        $str = explode(':',$string);
        $$str[0] = trim($str[1]);
    }
}

Com este código, se você der um echo em $ChannelState, por exemplo, ele retorna o valor capturado.

A desvantagem deste método é não poder ter certeza das variáveis criadas, enquanto com a array, você pode saber facilmente dando um print_r() nela.

Quanto à consultoria, podemos conversar.

Meu email de contato é: [email protected]

Perfeito, porém, estou com a seguinte dificuldade:

preciso capturar um bloco de informações, onde as variaveis serão duplicadas... exemplo retornado do asterisk:

Event: QueueMember

Queue: Suporte

Name: SIP/103

Location: SIP/103

Membership: static

Penalty: 0

CallsTaken: 0

LastCall: 0

Status: 5

Paused: 0

Event: QueueMember

Queue: Suporte

Name: SIP/102

Location: SIP/102

Membership: static

Penalty: 0

CallsTaken: 0

LastCall: 0

Status: 2

Paused: 0

aí no php, eu listo do mysql, os "Name" exemplo SIP/102 E SIP/103... poderão haver mais SIPs...

MYSQL: SIP/102 - RESULTADO DO ARRAY = STATUS = 2

MYSQL: SIP/103 - RESULTADO DO ARRAY = STATUS = 5

Tem alguma forma de indentificar resultados especificos para agrupar dento da linha certo no php?

Se quiser podemos falar via email ou MSN.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this