3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * * PHP Version 5.5 * Classe de controle e contagem de palavras. * * @author Felipe Francisco <felipefrancisco@outlook.com> * @example Exemplo da estrutura JSON utilizada nessa classe: * * { * [0] => ( * ['palavras'] => ( * ['palavra_1'] => 5, * ['palavra_2'] => 8, * ['palavra_3'] => 1 * ), * ['total'] = '14' * ), * [1] => ( * ['palavras'] => ( * ['palavra_3'] => 3, * ['palavra_4'] => 6, * ['palavra_5'] => 10 * ), * ['total'] = '19' * ), * ['total_de_palavras'] => '33' * } */ namespace JSON; class Texto { /** * Vetor com todos os textos recebidos. * @var string[] */ private $textos = []; /** * Estrutura que será transformado em JSON. * @var string[] */ private $retorno = []; /** * Total de Palavras encontradas nos textos. * @var integer */ private static $totalPalavras; /** * Recebe a variável com o texto ou o conjunto de textos * e inicia o processo para contar e separar as palavras. * * @param string/string[] $textos (Texto ou vetor de textos) */ public function __construct($textos = null) { # Recebe automaticamente a variável caso ela não seja passada pelo argumento. if(!$textos) $textos = $_POST['textos']; # Verifica se o texto que está sendo fornecido é um texto válido. if(is_null($textos) || empty($textos)) throw new Exception("Por favor, insira um texto com conteúdo"); # Caso o argumento recebido não seja um conjunto de textos, transforme-o em um conjunto. if(!is_array($textos)) $this->textos[] = $texto; # Para cada texto do conjunto, adicioná-lo ao vetor de textos. foreach($textos as $t) $this->adicionaTexto($t); } /** * Adiciona um texto ao conjunto de textos retirando * as possíveis tags HTML que possam existir. * * @param string $texto (um texto qualquer) * @return void */ public function adicionaTexto($texto) { # Retira a pontuação do texto. $texto = preg_replace('/[\p{P}]/', "", $texto); # Retirando qualquer tag HTML por precaução. $this->textos[] = strtolower(strip_tags($texto)); } /** * Separa as palavras do texto e efetua a contagem delas * para adquirir um número total de textos e palavras. * * @param integer $i [description] * */ private function separaPalavras($i = 0) { $texto = $this->textos[$i]; # Caso não existam mais textos a serem tratados, encerrar a recursão. if(!$texto) return; # Separa as palavras no texto. $palavras = explode(' ', $texto); # Iteração entre as palavras encontradas. foreach($palavras as $p) { $this->retorno[$i]['palavras'][$p]++; $this->retorno[$i]['total']++; self::$totalPalavras++; } # Chama a função novamente para verificar se ainda existem textos. $this->separaPalavras(++$i); } /** * Gera o JSON das informações que estão na classe. * @return string (textos em JSON na estrutura pré-definida) */ public function gerarJSON() { # Reseta a contagem de palavras; self::$totalPalavras = 0; # Separa as palavras. $this->separaPalavras(); # Criando o JSON. $json = $this->retorno; $json['total_de_palavras'] = self::$totalPalavras; return json_encode($json); } } error_reporting(E_ALL ^ E_NOTICE); $textos = ['meu nome é joão', 'meu nome é Maria']; $oTexto = new Texto($textos); $oTexto->adicionaTexto('olá, eu sou felipe!'); $json = $oTexto->gerarJSON(); $decoded = json_decode($json); var_dump($json); var_dump($decoded);

preferences:
39.4 ms | 402 KiB | 5 Q