Php 把长线分成小段试图找到一种优雅的方式来做到这一点
如果字符串大于50个字符长,我需要将其拆分。 允许的最大值为3块50。它可以少于50,但决不能超过150。 我不需要添加任何特殊字符,也不需要充当“拆分器”;我可以在任何地方断开字符串,没有问题,因为建议不是为了向用户显示它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
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);