将字符串分成相等的两半

Split the string into two equal halves

本文关键字:字符串      更新时间:2023-09-26
$string="p1234,p12,p12345,1234,12,12345,12,45678,334,q1255,q67889,q235";

我想将字符串分成两部分,但拆分可以在字符"p"的最后一次出现时完成,即在 p12345 之后我会在下面给出的组中给出

$str1=p1234,p12,p12345;
$str2=1234,12,12345;
 $str3=q1255,q67889,q235;

试试:

$string = "p1234,p12,p12345,1234,12,12345";
$parts  = explode(',', $string);
$size   = count($parts);
$firsthalf  = implode(',', array_slice($parts, 0, $size / 2));
$secondhalf = implode(',', array_slice($parts, $size / 2));
$string="p1234,p12,p12345,1234,12,12345";
$a = explode(',', $string);
$s1 = implode(',', array_slice($a, 0, count($a)/2))
$s2 = implode(',', array_slice($a, count($a)/2))
echo $s1
//⇒ p1234,p12,p12345
echo $s2
//⇒ 1234,12,12345

UPD 这个问题被重申了。以下是 p/non-p 的答案:

$a = explode(',', $string);
$s1 = implode(',', array_filter($a, function($e) { return $e[0] === 'p'; }))
$s2 = implode(',', array_filter($a, function($e) { return $e[0] !== 'p'; }))
echo $s1
//⇒ p1234,p12,p12345
echo $s2
//⇒ 1234,12,12345

试试这个:

$string="p1234,p12,p12345,1234,12,12345";
$x = explode(',', $string);
$x = array_chunk($x, count($x)/2);
$str1 = implode($x[0],',');
$str2 = implode($x[1],',');

将删除 p 的最后一个出现

$string="p1234,p12,p12345,1234,12,12345";
$x = explode(',', $string);
$count=0;
foreach($x as $v) {
  if(strpos($v,'p') !== false) {
    $count++;
  }
}
echo $firsthalf  = implode(',', array_slice($x, $count)).'<br>';
echo $secondhalf = implode(',', array_slice($x, 0, $count));

简单的解决方案:使用 mb_strrpos() 查找最后一个 'p'。
然后,在以下情况下使用结果位置作为偏移
使用 mb_strpos() 搜索它后面的第一个逗号。
使用 mb_substr() 获取这两个部分。
做。
!请注意区别:mb_strrpos() 与 mb_strpos() !

优雅的解决方案:如果你想在[逗号][密码]的第一个组合中真正分裂,与您的示例相匹配,您也可以只发出一个 mb_split()。
然后你只需要对[逗号][密码]使用正确的正则表达式,我不会在这里为您详细说明。