Php 如果文本太长,如何在字符达到20个字符之前获取单词

Php 如果文本太长,如何在字符达到20个字符之前获取单词,php,while-loop,substr,Php,While Loop,Substr,这就是我想做的:如果名称长度超过60个字符,请将名称分成3行,每行20个字符 我想在空格前读第二个名字 也是第三个在空格前读单词的名字,即使它是20个字符 我不希望它根据上面GetSet的指令打断单词。试试下面这个,改变你需要改变的,因为我仍然不明白你想要什么 <?php $conn1 = new MySqli('localhost','root','','test'); $data = "Hubert Blaine Wolfeschlegel Steinhausenberg

这就是我想做的:如果名称长度超过60个字符,请将名称分成3行,每行20个字符

我想在空格前读第二个名字 也是第三个在空格前读单词的名字,即使它是20个字符
我不希望它根据上面GetSet的指令打断单词。试试下面这个,改变你需要改变的,因为我仍然不明白你想要什么

<?php 
$conn1 = new MySqli('localhost','root','','test');

$data = "Hubert Blaine Wolfeschlegel Steinhausenbergerdorff Sr.";
$namelength = strlen($data);
$a = 20;
echo"<br>".$data;

#first name 
    $a = 20;

    if($namelength <= $a)
    {
      echo"<br>".$firstname =  substr($data ,0,$a);
    }
    else if ($namelength >= $a)
    {
      $a = 20;
      while(substr($data ,$a, 1) != " ")
      {
        $a-=1;
      }
      echo"<br>".$firstname =  substr($data ,0, $a);
    }
#second name
    $b = ($a + 20);
    if( $namelength <= $b)
    {
      echo"<br>".$secname =  substr($data ,($a),$namelength);

    }
    else if($namelength >= $b)
    { 
      $b = 40;
      while(substr($data ,$b, 1) != " ")
      {
        $b-=1;
      }
      $secname =  substr($data ,21, $b);
      $secname=trim($secname);
      echo"<br>".$secname;


    }
#third name
    $c = ($b + 20);
    if ( $namelength <=$c) {
      echo"<br>".$thirdname =  substr($data ,($c+1),$namelength);
    }
    else if($namelength >= $c)
    { 
      $c = 60;
      while(substr($data ,$c, 1) != " ")
      {
        $c -=1;
      }
      echo"<br>".$thirdname =  substr($data ,41, $c);
    }
    
?>

    

对不起,您能简化一下吗?输入是什么,代码输出是什么,预期结果是什么?如果您的输入用空格分隔,您可以按空格拆分或分解为一个数组。循环数组,保持计数,超过20时,回到上一次索引迭代。一个更好的问题是:为什么要这样做?我想把名字分开,这样就可以插入身份证申请文件的数据库中。那么为什么最大字符数是20?这就是我想做的:如果名字长度超过60个字符,将名字分成3行,每行20个字符。你应该把你的在您的问题@HazmanKun中的最后一点评论
$str = "Hubert Blaine Wolfeschlegel Steinhausenbergerdorff Sr.";
$res = "Hubert Blaine hlegel Steinhausenbergerdor rgerdorff Sr.";
$final_res = "";
print_r(explode(" ", $str));
$arr = explode(" ", $str);

$i = 0;
foreach($arr as &$value){
    echo("</br>val: ". $value);
    if($i == 1 && strlen($value) >= 20){ # 20 length?
        $value = substr($value, xxxx, zzzzz); # define your rule here, tbh I still dont get what your condition is
    }
    $final_res += $value;
}
<?php 
    $data  = "Hubert Blaine Wolfeschlegel Steinhausenbergerdorff Sr.";

    // $lines = explode("/ +/", $data);
    // $clean = array_map("trim",$lines);
    // $output = array_filter(array_unique($clean));
    // print_r($output);
    $data       = trim($data);
    echo"  Length : ".$namelength = strlen($data);
   
   $a =  20;
   if ($namelength < $a)
   {
     echo"<br>nama 1 : ".$nama1 = substr($data,0,$a);
   }
   else if ($namelength >= $a)
   {
    while(substr($data,$a,1) != " ")
    { $a -= 1;}
   
    echo"<br>nama 1 : ".$nama1 = substr($data,0,$a);
   }
      $b = $a + 20;
      if ($b > $namelength)
      {
        echo"<br>nama 2 : ".$nama2 = substr($data,($a+1),$namelength);
      }
      else
      {
        while(substr($data,$b,1) != " ")
        { $b -= 1;}
        $b = $b - $a;
        echo"<br>nama 2 : ".$nama2 = substr($data,($a+1),$b);
      }

      $b = $b + $a;
      $c = $b + 20;
      if ($c > $namelength)
      {
        echo"<br>nama 3 : ".$nama3 = substr($data,($b+1),$namelength);
      }
      else
      {
        echo '<script> alert ("Hanya 60 aksara dipaparkan"); </script>';
        while(substr($data,$c,1) != " ")
        { $c -= 1;}
        $c = $c - $b;
        echo"<br>nama 3 : ".$nama3 = substr($data,($b+1),$c);
      }