PHP substr 按字符串,而不是按长度

PHP substr by string, not by length

我正在使用这个代码

substr(trim($val), 0, 2).'/'.substr(trim($val), 0, 4).'/'.trim($val);

转换

a.b.c.

a. / a.b. / a.b.c.

一旦我得到像 a.bb.c 这样的两位数,这显然不起作用,这导致

a. / a.bb / a.bb.c. 

(缺少点!)而不是

a. / a.bb. / a.bb.c.

有没有办法 extract/trim 部分不是基于长度,而是基于点?

<?php
$data='a.b.c.';

$data=explode('.',$data);

$newData=array(
    $data[0].'. ',$data[0].'.'.$data[1].'. ',$data[0].'.'.$data[1].'.'.$data[2].'.'
);



$newData = implode("/", $newData);

echo $newData;

输出为:

a. /a.b. /a.b.c.

使用 explode 和 foreach 可以使它递归,像这样:

$val = 'aa.bv.cc.dd';
$vals = explode('.',$val);
$result = [];
foreach($vals as $k => $v) {
    if(trim($v) === '') continue; 
    $result[] = ($k > 0 ? $result[$k-1] : '').$v.'.';
}
echo implode(' / ',$result);

通过这种方式,您无需担心每个点后的字母数量和段数,您可以处理 "a.b" 或 "a.b.c" 或 "aaa.bbb.ccc.ddd.eeeee" 让脚本为您完成所有工作 ;)