문자열에서 쉼표로 구분 된 중복 값을 제거하는 가장 빠른 방법을 찾고 있습니다.PHP에서 문자열에서 중복을 제거하십시오
내 문자열이 이렇게 보입니다.
$str = 'one,two,one,five,seven,bag,tea';
문자열을 값으로 분해 한 다음 비교할 수는 있지만 느릴 것입니다. preg_replace()는 더 빠를 것인가? 어떤 사람이이 기능을 사용 했습니까?
문자열에서 쉼표로 구분 된 중복 값을 제거하는 가장 빠른 방법을 찾고 있습니다.PHP에서 문자열에서 중복을 제거하십시오
내 문자열이 이렇게 보입니다.
$str = 'one,two,one,five,seven,bag,tea';
문자열을 값으로 분해 한 다음 비교할 수는 있지만 느릴 것입니다. preg_replace()는 더 빠를 것인가? 어떤 사람이이 기능을 사용 했습니까?
가장 짧은 코드는 다음과 같습니다
가 빠른 경우$str = implode(',',array_unique(explode(',', $str)));
... 나도 몰라, 아마 빨리 명시 적으로 반복 한 후입니다.
참조 : 다루기 implode
, array_unique
, explode
@Felix, 고맙습니다. 그게 내가 필요로하는 것입니다. 문자열의 최대 값은 50입니다. – Adnan
@Adnan : 50 개의 값을 사용하면 문제가 많지 않을 것입니다. –
2의 배수 일 경우 작동합니다. 아닙니다, 실패합니다. –
는 : $string = 'one,two,one,five,seven,bag,tea';
는 "스크립트까지"임의의 지점에서 문자열을 생성하는 경우에, 당신은이 발생할 때 중복을 제거해야합니다. 다음에 다시 내파
$string='';
foreach($data as $value){
$string.=(strlen($string)?',':'').some_func($value);
}
가 ... 다음 구분 기호 (쉼표)를 기반으로 $string
에서 고유 한 값을 추출해야합니다 :
의 당신처럼 문자열을 생성하기 위해 연결을 사용하고 있다고 가정 해 봅시다 구분 기호.
난 당신이 더 직접적인 방법을 설계하고 다음과 같이 초기 foreach 루프 내부의 중복을 거부하는 것이 좋습니다 :
중복 값이 존재하는 것이 허용되지 않기 때문에이 작동foreach($data as $value){
$return_value=some_func($value); // cache the returned value so you don't call the function twice
$array[$return_value]=$return_value; // store the return value in a temporary array using the function's return value as both the key and value in the array.
}
$string=implode(',',$array); // clean: no duplicates, no trailing commas
. 모든 후속 어커런스는 이전 어커런스를 덮어 쓰는 데 사용됩니다. 이 function-less 필터는 배열이 동일한 배열 (레벨)에 두 개의 동일한 키를 가질 수 없기 때문에 작동합니다.
if(!isset($array[$return_value])){$array[$return_value]=$return_value;}
을 호출하여 루프의 배열 데이터를 "덮어 쓰지"않아도되지만 차이점은 모든 반복에서 isset()
함수를 호출하는 것을 의미합니다. 이러한 연관 키 할당을 사용할 때의 이점은 isset()
보다 느린 in_array()
을 사용하지 않아도된다는 것입니다.
가 같은 2 차원 어레이의 데이터 열을 추출하는 경우, 상기 그 전체 :
echo implode(',',array_column($str,'word','word'));
:
$string='';
foreach($data as $value){
$string.=(strlen($string)?',':'').$value['word'];
}
는 그런 다음 루프 like this없이 array_column()
마법을 활용할 수도
마지막으로 마이크로 최적화에 관심이있는 사용자는 array_unique()
의 단일 호출이 실제로 af보다 느리다는 것을 알 수 있습니다. 두 가지 함수 방법. 자세한 내용은 Read here을 참조하십시오.
마지막으로,이 작업을 수행하는 방법은 여러 가지가 있습니다.explode->unique->implode
은 구분 된 문자열을 생성하지 않는 경우 가장 간결한 방법 일 수 있지만 가장 직접적이거나 가장 빠른 방법은 아닙니다. 자신의 업무에 가장 적합한 것을 선택하십시오.
이 데이터의 예상 크기는 얼마입니까? –