Ir para conteúdo
Fórum Script Brasil
  • 0

Identificar palavras dentro de uma variavel STRING


Certa Soluções

Pergunta

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?

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 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
)

Editado por MLeandroJr!
Link para o comentário
Compartilhar em outros 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?

Link para o comentário
Compartilhar em outros 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.

Editado por MLeandroJr!
Link para o comentário
Compartilhar em outros 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.

Link para o comentário
Compartilhar em outros 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 é: mleandrojr@yggdrasill.com.br

Link para o comentário
Compartilhar em outros 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 é: mleandrojr@yggdrasill.com.br

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.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...