PHP:根据长度然后分隔符将字符串拆分为数组

时间:2014-02-15 05:36:17

标签: php

我正在尝试拆分短信,如果它达到160个字符的限制。

这是我目前的代码。

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

我当前的问题

  1. 我的短信包含“\ n”,但是当我使用strlen时,它只将“\ n”计为1个字符,而短信服务器将“\ n”计为2个字符。
  2. 目前,它会在达到160个字符的限制时拆分SMS消息,这非常难看。例如:
  3. 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
    

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分: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");

希望它有所帮助。