php에서 str_shuffle ()은 문자열의 문자 순서를 무작위로 방해하는 일반적으로 사용되는 기능입니다. 기본 구문은 매우 간단합니다.
<span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">str_shuffle</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>)
</span></span>
이 함수는 문자열을 입력으로 사용하고 문자 순서로 중단되는 새 문자열을 반환합니다. 그러나 많은 경우 기능이 잘 수행되지만 일부 개발자는 특히 문자열이 숫자로 구성된 경우 일부 문제에 직면 할 수 있습니다.
문자가 문자, 숫자 또는 기타 기호인지를 돌보지 않는 문자 수준 무작위 화를 기반으로 str_shuff () 입니다. 따라서 숫자로 구성된 문자열을 전달하면 str_shuffle ()은 내부적으로 숫자를 재정렬합니다. 다시 말해,이 숫자의 순서를 방해합니다.
예:
<span><span><span class="hljs-variable">$numbers</span></span><span> = </span><span><span class="hljs-string">"123456789"</span></span><span>;
</span><span><span class="hljs-variable">$shuffled</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_shuffle</span></span><span>(</span><span><span class="hljs-variable">$numbers</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$shuffled</span></span><span>;
</span></span>
출력 결과 (각 실행마다) :
<span><span>738156492
</span></span>
위의 예에서 숫자 순서가 변경되었으며 이는 str_shuffle () 의 예상 동작입니다.
이 문제는 일반적으로 개발자가 str_shuffle () 의 동작을 오해 할 때 발생합니다. 문자에 따라 str_shuff ()가 무작위로 엉망이되므로 문자열의 순서가 변경되지만 문자열 세트는 변경되지 않습니다. 즉, 통과 된 문자열에 숫자 만 있으면 반환 된 문자열은 여전히 동일한 숫자를 포함하지만 해당 순서가 변경되었습니다.
경우에 따라 개발자는 무작위로 생성 된 숫자 또는 식별자와 같은 "완전히 다른"결과를 기대할 수 있습니다. 그러나 혼란의 결과는 문자 순서의 변형 일뿐이며 캐릭터 세트는 변경되지 않으므로 개발자는 "장애가없는"것으로 느낄 수 있습니다.
솔루션 : 문자열에 충분한 다양성이 포함되어 있는지 확인하거나 다른 무작위 화 기술을 결합하여 str_shuffle ()을 호출하기 전에 귀하의 요구를 충족시킬 수 있습니다.
함수 구현 관점에서 str_shuffle ()은 문자열의 컨텐츠 유형에 신경 쓰지 않으며 단순히 문자를 무작위로 정렬합니다. 따라서, 숫자 줄과 알파벳순의 처리는 차이없이 정확히 동일합니다.
예:
<span><span><span class="hljs-variable">$letters</span></span><span> = </span><span><span class="hljs-string">"abcdef"</span></span><span>;
</span><span><span class="hljs-variable">$numbers</span></span><span> = </span><span><span class="hljs-string">"123456"</span></span><span>;
</span><span><span class="hljs-variable">$shuffledLetters</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_shuffle</span></span><span>(</span><span><span class="hljs-variable">$letters</span></span><span>);
</span><span><span class="hljs-variable">$shuffledNumbers</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_shuffle</span></span><span>(</span><span><span class="hljs-variable">$numbers</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Shuffled Letters: "</span></span><span> . </span><span><span class="hljs-variable">$shuffledLetters</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Shuffled Numbers: "</span></span><span> . </span><span><span class="hljs-variable">$shuffledNumbers</span></span><span>;
</span></span>
출력 결과 (각 실행마다 다름) :
<span><span><span class="hljs-attr">Shuffled Letters:</span></span><span> </span><span><span class="hljs-string">eabdcf</span></span><span>
</span><span><span class="hljs-attr">Shuffled Numbers:</span></span><span> </span><span><span class="hljs-number">453621</span></span><span>
</span></span>
보시다시피, 알파벳 문자열이든 숫자 문자열이든 str_shuffle () 의 효과는 문자의 무작위 혼란입니다.
str_shuffle ()는 특수 문자, 공간 및 구두점 마크가 포함 된 문자열을 완전히 지원합니다. 문자열의 문자 유형에 관계없이 같은 방식으로 캐릭터를 무작위로 엉망으로 만듭니다.
예:
<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello, World!"</span></span><span>;
</span><span><span class="hljs-variable">$shuffled</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_shuffle</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$shuffled</span></span><span>;
</span></span>
출력 결과 (각 실행마다 다름) :
<span><span>H! oelrW llo,d
</span></span>
이 예에서는 문자열의 문자, 구두점 및 공간이 모두 중단됩니다.
특정 시나리오에서 str_shuff ()를 사용하여 특정 시나리오에서 숫자 문자열을 방해하고 출력이 유효한 숫자 (예 : 고유 식별자 또는 검증 코드 등)가 될 것으로 예상하는 경우, 방해 된 문자열은 더 이상 유효한 숫자 양식으로 보장되지 않습니다. 숫자 유형으로 되돌려야하는 경우 예측할 수없는 문제가 발생할 수 있습니다.
예를 들어:
<span><span><span class="hljs-variable">$numberString</span></span><span> = </span><span><span class="hljs-string">"123456"</span></span><span>;
</span><span><span class="hljs-variable">$shuffled</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_shuffle</span></span><span>(</span><span><span class="hljs-variable">$numberString</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> (</span><span><span class="hljs-keyword">int</span></span><span>) </span><span><span class="hljs-variable">$shuffled</span></span><span>;
</span></span>
str_shuffle ()는 숫자 순서를 방해하는 반면, 정수로 변환 할 때 숫자 순서가 손실되면, 선행 0이 손실 될 수 있으며 (현재 경우) 오류가 발생할 수 있습니다.
제안 : 임의의 숫자 시퀀스가 필요하고 문자열이되기를 원하지 않으면 숫자 유형의 무작위 화에 더 적합한 rand () 또는 mt_rand () 와 같은 임의의 숫자를 생성하는 다른 함수를 고려하십시오.
str_shuffle ()은 반환 된 문자열이 무작위로 배열 된 문자이기 때문에 고유한지 확인하지 않습니다. 특히 검증 코드 또는 고유 식별자 생성을 수행 할 때 고유 한 문자열을 생성 해야하는 경우 Uniqid () 또는 Random_Bytes ()를 사용하여 고유성을 보장하는 다른 방법을 사용하는 것을 고려해야합니다.
예:
<span><span><span class="hljs-variable">$uniqueId</span></span><span> = </span><span><span class="hljs-title function_ invoke__">uniqid</span></span><span>(); </span><span><span class="hljs-comment">// 고유 한 생성ID</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$uniqueId</span></span><span>;
</span></span>