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'] = $this->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); print_r($decoded); echo $json;
Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.27, 8.2.0 - 8.2.17, 8.3.0 - 8.3.4
Warning: Undefined array key 0 in /in/XS7da on line 119 Warning: Undefined array key "palavras" in /in/XS7da on line 119 Warning: Undefined array key "meu" in /in/XS7da on line 119 Warning: Undefined array key "total" in /in/XS7da on line 120 Warning: Undefined array key "nome" in /in/XS7da on line 119 Warning: Undefined array key "é" in /in/XS7da on line 119 Warning: Undefined array key "joão" in /in/XS7da on line 119 Warning: Undefined array key 1 in /in/XS7da on line 119 Warning: Undefined array key "palavras" in /in/XS7da on line 119 Warning: Undefined array key "meu" in /in/XS7da on line 119 Warning: Undefined array key "total" in /in/XS7da on line 120 Warning: Undefined array key "nome" in /in/XS7da on line 119 Warning: Undefined array key "é" in /in/XS7da on line 119 Warning: Undefined array key "maria" in /in/XS7da on line 119 Warning: Undefined array key 2 in /in/XS7da on line 119 Warning: Undefined array key "palavras" in /in/XS7da on line 119 Warning: Undefined array key "ol�" in /in/XS7da on line 119 Warning: Undefined array key "total" in /in/XS7da on line 120 Warning: Undefined array key "eu" in /in/XS7da on line 119 Warning: Undefined array key "sou" in /in/XS7da on line 119 Warning: Undefined array key "felipe" in /in/XS7da on line 119 Warning: Undefined array key 3 in /in/XS7da on line 107 Warning: Undefined property: JSON\Texto::$totalPalavras in /in/XS7da on line 143
Output for 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33
Output for 5.5.0 - 5.5.38, 5.6.0 - 5.6.40
Strict Standards: Accessing static property JSON\Texto::$totalPalavras as non static in /in/XS7da on line 143
Output for 5.4.0 - 5.4.45
Strict Standards: Accessing static property JSON\Texto::$totalPalavras as non static in /in/XS7da on line 143 {"0":{"palavras":{"meu":1,"nome":1,"\u00e9":1,"jo\u00e3o":1},"total":4},"1":{"palavras":{"meu":1,"nome":1,"\u00e9":1,"maria":1},"total":4},"2":{"palavras":{null:1,"eu":1,"sou":1,"felipe":1},"total":4},"total_de_palavras":null}
Output for 5.3.0 - 5.3.29
Parse error: syntax error, unexpected '[' in /in/XS7da on line 40
Process exited with code 255.
Output for 4.4.2 - 4.4.9, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17
Parse error: syntax error, unexpected T_STRING in /in/XS7da on line 32
Process exited with code 255.
Output for 4.3.0 - 4.3.1, 4.3.5 - 4.3.11, 4.4.0 - 4.4.1, 5.0.0 - 5.0.5
Parse error: parse error, unexpected T_STRING in /in/XS7da on line 32
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error in /in/XS7da on line 32
Process exited with code 255.

preferences:
274.28 ms | 401 KiB | 456 Q