Php 如何找到字符串拆分的解决方案?
我有一个字符串数组。像这样的Php 如何找到字符串拆分的解决方案?,php,string,laravel-5,Php,String,Laravel 5,我有一个字符串数组。像这样的 $preorder[] = " iPhone 7/7 plus\n \n 7 32Gb Jet B 1778 AA/A - 1 550\n 7 32Gb Jet B 1778 HN/A - 50\n 7 32Gb Jet B 1778 - 1 500\n 7 32Gb Jet B 1778 LE/A - 1 550\n 7 32Gb Jet B 1778 AH/A -
$preorder[] = "
iPhone 7/7 plus\n
\n
7 32Gb Jet B 1778 AA/A - 1 550\n
7 32Gb Jet B 1778 HN/A - 50\n
7 32Gb Jet B 1778 - 1 500\n
7 32Gb Jet B 1778 LE/A - 1 550\n
7 32Gb Jet B 1778 AH/A - 1 600\n
7 32Gb Jet B 1778 VC/A - 1 550\n
7 32Gb Jet B 1778 MY/A - 1 550\n
7 32Gb Jet B 1778 2B/A - 1 550\n
\n
7 128Gb Black 1778 2B/A - 1 550\n
7 128Gb Black 1778 VC/A - 1 550\n
\n
7 256Gb Black 1778 2B/A - 1 550\n
\n
7 128Gb Jet B 1778 VC/A - 1 550\n
\n
7 256Gb Black 1778 AH/A - 1 600\n
7 256Gb Black 1778 AA/A - 1 550\n
7 256Gb Black 1778 HN/A - 50\n
7 256Gb Red 1778 MY/A - 1 550\n
\n
7 Plus 32Gb Black 1784 2B/A - 1 800\n
\n
7 256Gb Jet B 1778 MY/A - 4 950\n
7 256Gb Jet Black 1778 - 1 500\n
7 256Gb Jet B 1778 AH/A - 1 600\n
7 256Gb Jet B 1778 HN/A - 50\n
\n
7 Plus 32Gb Silver 1784 2B/A - 5 200\n
7 Plus 32Gb Black 1784 LE/A - 1 700\n
7 Plus 32Gb Black 1784 HN/A - 50\n
7 Plus 32Gb Black 1784 - 1 700\n
7 Plus 32Gb Gold 1784 HN/A - 50\n
7 Plus 32Gb Gold 1784 LE/A - 1 700\n
7 Plus 32Gb Gold 1784 MY/A - 1 800\n
7 Plus 32Gb Rose 1784 MY/A - 5 200\n
\n
7 Plus 128Gb Black 1784 2B/A - 5 200\n
";
这是一些产品的清单,我会发电报的。但电报对信息长度有限制。因此,如果我的消息超过4000个字符,我需要将其拆分为2条消息
但用空行分割这个字符串是个糟糕的解决方案。所以我不知道怎么才能让这根绳子看起来像
$msg[] = "
iPhone 7/7 plus\n
\n
7 32Gb Jet B 1778 AA/A - 1 550\n
7 32Gb Jet B 1778 HN/A - 50\n
7 32Gb Jet B 1778 - 1 500\n
7 32Gb Jet B 1778 LE/A - 1 550\n
7 32Gb Jet B 1778 AH/A - 1 600\n
7 32Gb Jet B 1778 VC/A - 1 550\n
7 32Gb Jet B 1778 MY/A - 1 550\n
7 32Gb Jet B 1778 2B/A - 1 550\n
\n
7 128Gb Black 1778 2B/A - 1 550\n
7 128Gb Black 1778 VC/A - 1 550\n";
$msg[]="
\n
7 256Gb Black 1778 2B/A - 1 550\n
\n
7 128Gb Jet B 1778 VC/A - 1 550\n
\n
7 256Gb Black 1778 AH/A - 1 600\n
7 256Gb Black 1778 AA/A - 1 550\n
7 256Gb Black 1778 HN/A - 50\n
7 256Gb Red 1778 MY/A - 1 550\n";
$msg[] = "
\n
7 Plus 32Gb Black 1784 2B/A - 1 800\n
\n
7 256Gb Jet B 1778 MY/A - 4 950\n
7 256Gb Jet Black 1778 - 1 500\n
7 256Gb Jet B 1778 AH/A - 1 600\n
7 256Gb Jet B 1778 HN/A - 50\n
\n
7 Plus 32Gb Silver 1784 2B/A - 5 200\n
7 Plus 32Gb Black 1784 LE/A - 1 700\n";
$msg[] = "
7 Plus 32Gb Black 1784 HN/A - 50\n
7 Plus 32Gb Black 1784 - 1 700\n
7 Plus 32Gb Gold 1784 HN/A - 50\n
7 Plus 32Gb Gold 1784 LE/A - 1 700\n
7 Plus 32Gb Gold 1784 MY/A - 1 800\n
7 Plus 32Gb Rose 1784 MY/A - 5 200\n
\n
7 Plus 128Gb Black 1784 2B/A - 5 200\n
";
所以我想把字符串分成几部分,然后把它们组成一个数组,然后把它发送给电报。我的绳子可能有20000个字符长。所以我需要一种动态的方式来分割它。
有什么建议吗?谢谢 我解决了我的问题
$lines = preg_split ('/$\R?^/m', $preorder[1]);
$arrays = array_chunk($lines,100);
$new_line = [];
foreach($arrays as $key => $value) {
$new_line[] = implode("\r\n",$value);
}
感谢@sietse85提供数组块。您可以循环分解的新行数组,并计算每行中的字符数。
在msgcount中求和,只要少于4000个字符,就一直添加到字符串中,一旦超过4000个字符,就将其拆分并创建一个新的数组项。
完成所有循环后,str中仍有on消息,请添加该消息并完成。
我也在数组中添加了计数
$msgcount = 0;
$str = "";
foreach(explode(PHP_EOL, $preorder[0]) as $item){
$line = trim($item);
$count = strlen($line);
if($line == "") continue;
if($msgcount + $count <= 4000){
$str .= PHP_EOL . $line;
$msgcount += $count+1;
}else{
$new[] = ["msg" => trim($str), "count" => $msgcount-1];
$str = "";
$msgcount = 0;
}
}
$new[] = ["msg" => trim($str), "count" => $msgcount-1];
var_dump($new);
$msgcount=0;
$str=”“;
foreach(分解(PHP_EOL,$preorder[0])为$item){
$line=trim($item);
$count=strlen($line);
如果($line==“”)继续;
如果($msgcount+$count trim($str),“count”=>$msgcount-1];
$str=”“;
$msgcount=0;
}
}
$new[]=[“msg”=>trim($str),“count”=>$msgcount-1];
var_dump(新);
那么你试过什么?试着使用
preg\u match\u all()
来实现这一点purpose@sietse85preg_match_all拆分字符串?您不认为还有其他更轻的函数可以使用吗?explode(“\n”,$preorder)
也许然后分块数组或类似的东西,有很多解决方法…他还没有展示他尝试过的东西,所以…这就是http://php.net/array_chunk
有一个额外的注意事项:尝试使用PHP\u EOL
而不是\r\n
。