2014-02-15 3 views
0

Я пытаюсь разбить SMS-сообщение, если оно достигает предела в 160 символов.PHP: Разделить строку на массив на основе длины, затем разделитель

Это мой текущий код.

$messageparts = str_split($message, 160); 
    foreach($messageparts as $parts){ 
    sms($numbers, $parts); 
    } 

Моя текущая проблема

  1. Мой SMS сообщение содержит «\ п», но когда я использую StrLen, он рассчитывает только «\ п», как 1 символ в то время подсчета SMS-сервера «\ п», как 2 символа.
  2. В настоящее время он будет разделять SMS-сообщение, когда он достигнет предела в 160 символов, что довольно уродливо. Пример существо:
SMS 1 
Item A $160 
Item B $170 
Ite 

SMS 2 
m C $180 

Как видно из примера, его довольно плохой раскол. Я ищу кого-то, кто может помочь, чтобы функция могла сначала разбить по лимитам, а затем ограничить последним «\ n». Так что это будет следующим примером.

SMS 1 
Item A $160 
Item B $170 

SMS 2 
Item C $180 

ответ

1

Используйте следующий код:

$array = explode("\n",$message); 
$messages = array(); 
$i = 0; 
$newLineCharacterCount = 0; 
foreach ($array as $message) { 
    if ((str_len($messages[$i]) + str_len($message) + $newLineCharacterCount) <= 160) { 
     $messages[$i] = $messages[$i].message; 
     $newLineCharacterCount++; 
    } 
    else { 
     $i++; 
     $newLineCharacterCount = 0; 
     if (str_len($message) > 160) { 
      $tempMessages = str_split($message,160); 
      foreach ($tempMessages as tempMessagePart) { 
       $messages[$i] = tempMessagePart; 
       $i++; 
      } 
     } 
     else 
      $messages[$i] = $message; 
    } 
} 
+0

Спасибо! Ваш код неисправен, но я построил что-то на основе вашего примера! –

+0

@DamianSia Пожалуйста, добавьте исправленный код для будущих ссылок. Люди могут не читать ваш комментарий и использовать код напрямую. –

0

Первые расщепленные сообщения по линии, как, что:

$messageParts = array(); 
$messageLines = explode("\n", $message); 

foreach ($messageLines as $line) { 
    foreach (str_split($message, 160) as $part) { 
     $messageParts[] = $part; 
    } 
} 

Если вы хотите разделить на "" или "," вы используете функцию preg_split. Например:

$keywords = preg_split("/[\.,]+/", "hypertext. language, programming"); 

Надеюсь, что это поможет.

Смежные вопросы