Autor Zpráva
Poleno
Profil *
Dobrý den,
Potřebuji funkci, která bude rozdělovat slova delší než 18 znaků na několik slov (každé vždy po 18 znacích)
TZN:
Mám slovo
ahojjajsemdlouheslovoamamspoustuznakuprotosepotrebujurozdelit
a ja vzdy za 18. znak vlozim mezeru, takze vznikne:
ahojjajsemdlouhesl ovoamamspoustuznak uprotosepotrebujuro zdelit

Jak tohle udělat? Mohla by na to existovat nějaká funkce podobná funkci explode (tzn třeba rozdel(18, $text) )
Neví, někdo jestli taková funkce existuje? Nebo jde to vyřešit i jiným elegantním způsobem?

Díky všem za rady ;-)
tiso
Profil
http://sk2.php.net/manual/en/function.str-split.php
imploder
Profil
<?php
function rozdel($slovo, $delka_casti) {
  $delka = mb_strlen($slovo);
  $znak = 0; $cast = 0;
  while($znak<$delka) {
    if($znak+$delka_casti < $delka-1) {
      $casti[$cast] = mb_substr($slovo, $znak, $delka_casti); $cast++;
      $znak = $znak + $delka_casti;
    }
    else {
      $casti[$cast] = mb_substr($slovo, $znak); $cast++;
      break;
    }
  }
  return $casti;
}

// takto to funguje
$r = rozdel('ahojjajsemdlouheslovoamamspoustuznakuprotosepotrebujurozdelit', 18);
print_r($r);

// takto to bude fungovat stejně i s diakritikou, pokud uložíš soubor v kódování UTF-8
mb_internal_encoding("UTF-8");
$r = rozdel('ahojjájsemdlouhéslovoamámspoustuznakůprotosepotřebujurozdělit', 18);
print_r($r);
?>
PetrPN
Profil
function rozdel_slova($text,$pocet_pismen) 
{
global $celek;
$slovo = Split("[[:blank:]]+", $text);
	for($y=0;$y<Count($slovo);$y++):
		$slovo[$y] = Trim($slovo[$y]);
		if (Strlen($slovo[$y])<=$pocet_pismen):
			$celek .= $slovo[$y] . " ";
		else:
			$delit = Ceil(StrLen($slovo[$y])/$pocet_pismen);
			for($z=0;$z<$delit;$z++):
			$cast = Substr($slovo[$y], $z*$pocet_pismen, $pocet_pismen);
			$celek .= $cast . " ";
			endfor;
		endif;
	endfor;
$text = $celek; 
return $text;
}

Co tadyto.. Petr
Majkl578
Profil
Takhle:
$data = 'ahojjajsemdlouheslovoamamspoustuznakuprotosepotrebujurozdelit ';
$data = preg_replace('~(.{18})(.*)~Uu', '$1 $2', $data);
echo $data;


A nebo pokud je to potřeba jako funkce:
function splitString($string, $count)
{
	if ($count <= 0) {
		throw new Exception('Please provide an unsigned integer');
	}
	return preg_replace('~(.{' . (int) $count . '})(.*)~Uu', '$1 $2', $string);
}

echo splitString('ahojjajsemdlouheslovoamamspoustuznakuprotosepotrebujurozdelit', 18);
PetrPN
Profil
<?php

$str = "ahojjajsemdlouheslovoamamspoustuznakuprotosepotrebujurozdelit";

$arr1 = str_split($str);
$arr2 = str_split($str, 18);

print_r($arr1);
print_r($arr2);

?> 

Nebo přímo tady.. Petr

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: