뭔가?
사용은()
function cut($string)
{
// divide filename in basename and extension (simple solution)
$filenameParts = explode('.', $string);
$filename = $filenameParts[0];
$extension = $filenameParts[1];
$parts = explode('-', $filename); // split to an array
unset($parts[2]); // remove the parts from array
return implode('-', $parts) .'.' .$extension; // combine new filename
}
사용 preg_replace이다()을 폭발 (1)
또는 정규식과 짧은. 이 정규 표현식은 문자열에 기술 된 모든 구성 요소를 기대합니다. 첫 번째 블록에는 알파가 있고 두 번째 블록에는 날짜가 있습니다.
function cut($string) {
return preg_replace('/^([A-Z0-9]{9}\-[0-9]{8})(?:\-[0-9]{3})(\.xml)$/i', '$1$2', $string);
}
Debuggex Demo
사용 preg_replace이다() (2)
업데이트 :는 다른 솔루션은 N
이 숫자 문자열 -NNN.
을 대체 할 수 , 다음과 같이 :
function cut($string) {
return preg_replace('/\-[0-9]{3}\./i', '.', $string);
}
Debuggex Demo
그리고 자주 당신이 필요로하는 함수를 호출 : 배열에 여러 문자열을
$stringOne = 'XJ1ERJJFK-20140305-128.xml';
$stringTwo = 'XJ1ERJJFK-20140305-584.xml';
$stringOneNew = cut($stringOne); // returns "XJ1ERJJFK-20140305.xml"
하려면 다음을 수행하십시오
$new_array = array();
foreach ($your_array as $filename) {
$new_array[$filename] = cut($filename);
}
결과적인,은 다음과 같습니다 :
$new_array = array(
// 'key' => 'value'
// 'original' => 'generated with cut func'
'ABCDEF123-20140705-546.xml' => 'ABCDEF123-20140705.xml',
'ABCDEF123-20140705-589.xml' => 'ABCDEF123-20140705.xml',
'XJ1ERJJFK-20140305-128.xml' => 'XJ1ERJJFK-20140305.xml',
// ...
);
는 이제 매핑, 배열 값으로하여 비교 문자열과 나중에 물건 필요한 경우 키와 원본을 가지고있다. 그럼 당신은 예컨대, 그것과 함께 많은 트릭을 수행 할 수 있습니다 :
$unique_array_keys = array_keys($filenames); // array('ABCDEF123-20140705-546.xml', 'ABCDEF123-20140705-589.xml', 'XJ1ERJJFK-20140305-128.xml')
$unique_array_values = array_unique(array_values($filenames)); // array('ABCDEF123-20140705.xml', 'XJ1ERJJFK-20140305.xml')
// and more...
trivi al은 각 문자를 비교하는 for 루프를 작성합니다. 더 필요한 것이 있습니까? – webbiedave
@webbiedave 무슨 뜻인지 모르겠다. 문제의 입력 문자열의 레이아웃을 기반으로 두 문자열 간의 차이를 대규모로 제거해야한다. – jskidd3
문자열의 길이를 얻고 (배열 구문을 사용하여) 문자열의 각 문자를 'for'합니다. 두 번째 문자열과 비교합니다 (같지 않으면 세 번째 문자열로 복사하지 않습니다). 아주 간단한 알고리즘. – webbiedave