Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 把长线分成小段试图找到一种优雅的方式来做到这一点_Php_String_Split - Fatal编程技术网

Php 把长线分成小段试图找到一种优雅的方式来做到这一点

Php 把长线分成小段试图找到一种优雅的方式来做到这一点,php,string,split,Php,String,Split,如果字符串大于50个字符长,我需要将其拆分。 允许的最大值为3块50。它可以少于50,但决不能超过150。 我不需要添加任何特殊字符,也不需要充当“拆分器”;我可以在任何地方断开字符串,没有问题,因为建议不是为了向用户显示它 if (strlen($street) > 50) { $streetPart1 = substr($street,0,50); $streetPart2 = substr($street,51,100); $streetPart3 = substr($s

如果字符串大于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

检查PHP的
wordwrap()
函数

并查看
explode()
函数


检查PHP的
wordwrap()
函数

并查看
explode()
函数

您只需使用:

您只需使用:



谢谢为什么要考虑那些而不是子串?<代码>子串(< /代码>)没有错误。问题是使用变量,如
a1
a2
a3
,…再次感谢。那么,为了解决这个问题,你有什么建议我的意思是,我绝对肯定在很长的将来,我们不会有超过3个。所以它不是无限的为了更好地理解,我将编辑这个问题。我相信你的观察结果更贴切。谢谢。为什么要考虑那些而不是子串?<代码>子串(< /代码>)没有错误。问题是使用变量,如
a1
a2
a3
,…再次感谢。那么,为了解决这个问题,你有什么建议我的意思是,我绝对肯定在很长的将来,我们不会有超过3个。所以它不是无限的为了更好地理解,我将编辑这个问题。我相信你的观察更贴切。我这里确实有很多重复(我觉得需要看到好的代码,而不是我自己的坏代码。:我这里确实有很多重复。:(我觉得需要看到好的代码,而不是我自己的坏代码。:sSo我们使用数组,这就是没有1,2,3个变量名的解决方案?你可以用数组来概括你的算法。你可以
define()
将某个常量设置为3,然后使用该常量。然后您可以轻松地将其更改为2或4。根据经验法则,每个数据只能写入一次。
$parts=wrapandcroptorary($test,常量表示最大长度,常量表示行数);foreach($parts as&$part)echo(htmlspecialchars($part)。“
\n”;
你绝对是一位php大师。一旦我掌握了这方面的技能,我会按照你的建议去做。我还不能“快速完成一项功能以完成某些事情”对我来说,每一行都很重。但我会变得更好。不过,非常感谢你的时间。我会将你的答案标记为有用,因为其他比我更熟练的人可能会发现它正确无误。再次感谢你的时间。所以我们使用数组,这就是没有1,2,3个变量名的解决方案?你可以用ar推广你的算法射线。您可以
define()
将某个常量设置为3,然后使用该常量。然后您可以轻松地将其更改为2或4。根据经验法则,每个数据只应写入一次。
$parts=wrapandcroptorary($test,常量表示_MAXLENGTH,常量表示_LINECOUNT);foreach($parts as&$part)echo(htmlspecialchars($part)。“
\n”);
你绝对是一位php大师。一旦我掌握了这方面的技能,我会按照你的建议去做。我还不能“快速完成一项功能以完成某些事情”对我来说,每一行都很重。但我会变得更好。不过,非常感谢您的时间。我会将您的答案标记为有用,因为其他比我更熟练的人可能会发现它正确无误。再次感谢您的时间。使用可选的块长度参数,这是非常实用的。@nikic-我明白了……通过寻找需要的内容,don接下来,只添加第2部分或者添加第2部分和第3部分,这是一种正确的方法?(是的…这是另一个问题…但它是如此相关…:)由于您的规范将块的数量限制为三个,我发现有三个独立的变量是很明显的。当您需要动态长度或有许多项时,数组通常会成为更清晰的解决方案。@MEM:如果您使用的是数组版本,并且要添加的两个部分是相同的,那么您可以这样做:
$parts=array\u pad(str\u split($string,50),3,'THE_VALUE_TO_FILL_WITH');
使用可选的chunk length参数,这是非常实用的。@nikic-我明白了……通过寻找下一步需要做什么,只添加第2部分或添加第2部分和第3部分,这是一种正确的方法?(是的……这是另一个问题……但它是如此相关……)由于您的规范将块的数量限制为三个,我发现很明显有三个独立的变量。当您需要动态长度或有许多项时,数组通常是更清晰的解决方案。@MEM:如果您使用的是数组版本,并且要添加的两个部分都是相同的,那么您可以这样做:
$parts=array\u pad(str\u split($string,50),3,'u VALUE\u to\u FILL\u WITH')
<?
    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) "..."
}
$parts = str_split($string, 50);

// if you want to have vars instead of array:
list($part1, $part2, $part3) = str_split($string, 50);