note 73057 added to function.str-word-count

From: Date: Wed, 07 Feb 2007 17:34:10 +0000
Subject: note 73057 added to function.str-word-count
Groups: php.notes 
Request: Send a blank email to php-notes+get-123061@lists.php.net to get a copy of this message
Esta funcion tiene dos usos, limitar texto a determinados caracteres sin partir palabras a la mitad. Y dividir el texto en varias partes como para ubicar en Columnas o separarlo por páginas, etc. <?PHP function limitarTextoPorPalabras($texto, $limite = 160, $agrega = ""){ // Devuelve Array /* $texto :: Texto a dividir $limite :: límite de caracteres para dividir $agrega :: Texto para separar entre una y otra parte. No va a aparecer en el principio de la primera parte ni en el final de la última parte. */ $T = trim($texto); // texto sin espacios de más. $tamanoTexto = strlen($T); // largo del texto. $sale = array(); // Array base para las partes resultantes. $flag = 0; // Bandera para incrementar el array $sale. if ($tamanoTexto > $limite){ // si el texto es mayor que el $limite, dividirlo. $palabras = explode(" ",$T); // array del texto separado por espacios (osea, cada palabra). for($i=0; $i < count($palabras); $i++){ if((strlen($sale[$flag].$palabras[$i].$agrega.$agrega)) < $limite){ // Tamaño del texto disponible hasta el momento + las partes agregadas como parámetro tienen que ser menores que el $limite $sale[$flag] .= $palabras[$i]." "; }else{ $flag++; // si supera límite, crear nuevo elemento del array $sale. $sale[$flag] .= $palabras[$i]." "; } } $params = array($agrega,count($sale)); // Arreglo para los parámetros para el array_walk (texto a agregar, tamaño del array $sale) $fin = array_walk($sale,"sinEspacios",$params); //aplicando formato a cada elemento del array return $sale; // devuelve array donde cada elemento es una parte del texto partido y formateado }else{ $sale[0] = $T; return $sale; // como no supero el límite, devuelve array cuyo unico elemento es el texto } } function sinEspacios (&$texto,$llave,$agrega){ // Función CallBack para el array resultante. Elimina espacio en el principio y fin del texto y agrega el texto a agregar en cada una de sus partes if($llave == 0){ $texto = trim($texto.$agrega[0]); }elseif($llave == ($agrega[1]-1)){ $texto = trim($agrega[0].$texto); }else{ $texto = trim($agrega[0].$texto.$agrega[0]); } } //EJEMPLO TEXTO LARGO PARA DIVIDIR $texto = "Flea usa entre otros efectos: Boss Auto Wah, Boss Bass Overdrive, Boss Dynamic Filter, DOD FX25 Envelope Filter, Electro-Harmonix Bass Balls, Electro-Harmonix Q-Tron, Jim Dunlop Cry Baby Bass Wah y MXR Micro Amp. Sus bajos Music Man Stingray, Spector, Wal o Alembic llevan cuerdas GHS .045 a .105 y van conectados a cabezales Gallien Krueger con bafles Mesa/Boogie 2 x 15\" y 2 x 10\"."; $arrayParaPaginar = limitarTextoPorPalabras($texto,160, "(...) "); var_dump($arrayParaPaginar); ?> Devuelve: <?PHP array(3) { [0]=> string(147) "Flea usa entre otros efectos: Boss Auto Wah, Boss Bass Overdrive, Boss Dynamic Filter, DOD FX25 Envelope Filter, Electro-Harmonix Bass Balls, (...)" [1]=> string(159) "(...) Electro-Harmonix Q-Tron, Jim Dunlop Cry Baby Bass Wah y MXR Micro Amp. Sus bajos Music Man Stingray, Spector, Wal o Alembic llevan cuerdas GHS .045 (...)" [2]=> string(99) "(...) a .105 y van conectados a cabezales Gallien Krueger con bafles Mesa/Boogie 2 x 15" y 2 x 10"." } ?> Para cortar el texto a un solo párrafo: <?PHP $arrayParaPaginar = limitarTextoPorPalabras($texto,260, "<a href='algun lado'>leer nota...</a>"); echo $arrayParaPaginar[0]; ?> o <?PHP $arrayParaPaginar = limitarTextoPorPalabras($texto,260, ""); echo $arrayParaPaginar[0]."<a href='algun lado'>leer nota...</a>"; ?> Devuelve: <?PHP "Flea usa entre otros efectos: Boss Auto Wah, Boss Bass Overdrive, Boss Dynamic Filter, DOD FX25 Envelope Filter, Electro-Harmonix Bass Balls, Electro-Harmonix Q-Tron, Jim Dunlop Cry <a href='algunlado.php'>leer nota...</a>"; ?> ---- Server IP: 201.216.232.3 Probable Submitter: 24.232.242.109 ---- Manual Page -- http://www.php.net/manual/en/function.str-word-count.php Edit -- https://master.php.net/note/edit/73057 Del: integrated -- https://master.php.net/note/delete/73057/integrated Del: useless -- https://master.php.net/note/delete/73057/useless Del: bad code -- https://master.php.net/note/delete/73057/bad+code Del: spam -- https://master.php.net/note/delete/73057/spam Del: non-english -- https://master.php.net/note/delete/73057/non-english Del: in docs -- https://master.php.net/note/delete/73057/in+docs Del: other reasons-- https://master.php.net/note/delete/73057 Reject -- https://master.php.net/note/reject/73057 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#123061) next »