2017-11-10 10 views
0

에 의해 나는 최대한 빨리 먹을수록이 분명 작동하지 않습니다PHP의 SUBSTR는 길이

a.b.c. 

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

로 변환하는이 코드

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

를 사용하고 있지 a.bb.c와 같은 두 자리 숫자는

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

/길이를 기반으로하지 트림 부품을 추출하는 방법이 있나요 대신

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

의 (점! 없습니다)하지만 점에?

+0

나중에 'split'과 concat을 사용하는 것이 더 좋습니다. 편집 : 랜달 (Randall)의 말에 잘 들어 맞습니다. –

+1

'split'은 가치가 떨어지기 때문에'explode'를 사용하는 것이 더 좋습니다. – IncredibleHat

답변

1

과 같이 폭발 사용하고 foreach는 당신이 순환 할 수 있습니다 각 도트 다음의 글자 수와 세그먼트 수에 대한 정보를 얻을 수 있습니다. 스크립트는 "ab"또는 "abc"또는 "aaa.bbb.ccc.ddd.eeeee"와 같은 것을 처리 할 수 ​​있습니다.)

+0

후행 점을 잊어 버렸습니다.) – IncredibleHat

+1

Uops! 맞아, 고마워;) –

+0

@roberto 매력처럼 작동합니다. 감사! – george

0
<?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; 

그리고 출력은 다음과 같습니다 당신이 걱정할 필요가 없습니다 이런 식으로

$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. /a.b. /a.b.c.