note 73057 added to function.str-word-count
| From: | flea_fieldyenyahoopuntocompuntoar at osu1 dot php dot net | 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