Разделите длинную строку на маленькие.- пытаясь найти элегантный способ сделать это - PullRequest
0 голосов
/ 06 сентября 2010

Если строка длиннее 50 символов, мне нужно разделить ее.Максимально допустимое значение - 3 куска по 50. Это может быть меньше 50, но никогда не больше 150. Мне не нужно добавлять какие-либо специальные символы или служить в качестве «сплиттеров»;Я могу разбить строку где угодно, без проблем, так как предложение не для показа пользователю.

if (strlen($street) > 50)
{
  $streetPart1 = substr($street,0,50);
  $streetPart2 = substr($street,51,100);
  $streetPart3 = substr($street,101,150);
}

Есть ли более элегантный способ сделать это?

ОБНОВЛЕНИЕ:

Пример того, что будет дальше:

if (strlen($street) > 50)
{
   $streetPart1 = substr($street,0,50);

   $streetPart2 = substr($street,51,100);

   $streetPart3 = substr($street,101,150);

   if(!empty($streetPart2) && empty($streetPart3) 
   {
      //add part2 only.
   }elseif(!empty($streetPart2 && !empty($streetPart3))
   {
     //add part 2 and part 3
   }
}

Большое спасибо.MEM

Ответы [ 3 ]

4 голосов
/ 06 сентября 2010

Вы можете просто использовать str_split:

$parts = str_split($string, 50);

// if you want to have vars instead of array:
list($part1, $part2, $part3) = str_split($string, 50);
1 голос
/ 06 сентября 2010
<?
    function wrapAndCropToArray($text, $width, $lines)
    {
        $ret = array_slice(
            explode("\n",wordwrap($text,$width,"\n",true))
            , 0
            , $lines+1
        );
        if(isset($ret[$lines]))
            $ret[$lines] = "...";
        return $ret;
    }

    $test = "aadfuiosdy 34 123 412 341f2 38947 1029 384h120 39uh4 19023h 41234";
    var_dump(wrapAndCropToArray($test,10,3));
?>

Будет выводить:

array(4) {
  [0]=>
  string(10) "aadfuiosdy"
  [1]=>
  string(10) "34 123 412"
  [2]=>
  string(5) "341f2"
  [3]=>
  string(3) "..."
}
1 голос
/ 06 сентября 2010

Проверьте функцию PHP wordwrap().

http://php.net/manual/en/function.wordwrap.php

И проверьте explode() функцию

http://php.net/manual/en/function.explode.php

...