PHP 개발에서는 종종 테스트를위한 데이터 세트, 의사 랜덤 시뮬레이션 데이터 또는 캐시 된 주요 값 생성과 같은 "무작위이지만 제어 가능한"데이터 샘플을 생성해야합니다. 이 기사는 MT_SRAND 와 JSON_ENCODE 의 조합을 사용하여 예측 가능한 (즉, 재현 가능한) 데이터 샘플을 생성하는 방법을 소개하며 몇 가지 실용적인 팁을 공유합니다.
MT_SRAND 는 MT_RAND 의 종자 초기화 기능으로, 후속 MT_RAND 생성기가 지정된 종자에 따라 예측 가능한 결과를 출력하도록하는 데 사용됩니다. 다시 말해, 동일한 시드로 mt_srand를 호출하면 후속 mt_rand 호출은 동일한 "무작위"숫자를 반환합니다.
<span><span><span class="hljs-title function_ invoke__">mt_srand</span></span><span>(</span><span><span class="hljs-number">1234</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>(); </span><span><span class="hljs-comment">// 항상 같은 결과를 반환하십시오</span></span><span>
</span></span>
JSON_ENCODE 배열 또는 객체를 JSON 문자열로 변환합니다. 그 목적은 손쉬운 저장, 전송 또는 비교를 위해 생성하는 의사 랜덤 데이터 시퀀스를 문자열 형식으로 통합하는 것입니다.
mt_srand 와 json_encode를 결합하면 데이터 세트를 생성하고 구조화 된 JSON에서 출력 할 수 있으며 동일한 시드로 초기화 할 때 완전히 예측할 수 있습니다.
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">generateSample</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$seed</span></span></span><span>, </span><span><span class="hljs-variable">$count</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">mt_srand</span></span><span>(</span><span><span class="hljs-variable">$seed</span></span><span>); </span><span><span class="hljs-comment">// 지정된 씨앗으로 초기화하십시오</span></span><span>
</span><span><span class="hljs-variable">$data</span></span><span> = [];
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-variable">$count</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-variable">$data</span></span><span>[] = [
</span><span><span class="hljs-string">'id'</span></span><span> => </span><span><span class="hljs-variable">$i</span></span><span> + </span><span><span class="hljs-number">1</span></span><span>,
</span><span><span class="hljs-string">'value'</span></span><span> => </span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>(</span><span><span class="hljs-number">1000</span></span><span>, </span><span><span class="hljs-number">9999</span></span><span>),
</span><span><span class="hljs-string">'timestamp'</span></span><span> => </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>, </span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>(</span><span><span class="hljs-title function_ invoke__">strtotime</span></span><span>(</span><span><span class="hljs-string">'2020-01-01'</span></span><span>), </span><span><span class="hljs-title function_ invoke__">strtotime</span></span><span>(</span><span><span class="hljs-string">'2025-01-01'</span></span><span>)))
];
}
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">json_encode</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>, JSON_PRETTY_PRINT);
}
</span><span><span class="hljs-comment">// 예:같은 씨앗을 사용하십시오</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">generateSample</span></span><span>(</span><span><span class="hljs-number">42</span></span><span>);
</span></span>
생성 샘플 (42)을 여러 번 실행하면 출력 JSON 데이터 컨텐츠는 항상 일관되고 예측 가능합니다.
단위 테스트에서는 문제 해결 문제에 입력 데이터의 일관성을 보장하는 것이 매우 중요합니다. 시드 컨트롤을 사용하여 데이터를 생성 할 수 있으며 테스트가 실패 할 때 완전히 재현 할 수 있습니다.
<span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_decode</span></span><span>(</span><span><span class="hljs-title function_ invoke__">generateSample</span></span><span>(</span><span><span class="hljs-number">1001</span></span><span>), </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-comment">// 사용 $data 테스트 로직을 실행하십시오</span></span><span>
</span></span>
프론트 엔드 기능을 개발할 때이 방법을 사용하여 인터페이스가 완료되지 않았을 때 가짜 데이터를 생성 할 수 있으며 페이지 표시 및 대화식 테스트에 사용됩니다.
씨앗별로 특정 규칙의 데이터를 생성 한 다음 캐시 키의 일부로 json_encode 를 사용하여 일관성과 예측 가능성을 보장합니다.
종자 선택은 안정적이어야합니다 . 종자 값은 후속 재사용을 위해 비즈니스 관련 ID, 날짜 스탬프 등에서 나오는 것이 좋습니다.
json_pretty_print를 사용하여 가독성을 높이기 위해 : 디버깅 중에 Beautified JSON을 출력하여 수동 검사에 도움이됩니다.
글로벌 영향에주의하십시오 : MT_SRAND 는 글로벌 기능으로 사용 후 모든 후속 MT_RAND에 영향을 미칩니다. 부작용을 피하는 데주의를 기울이십시오. 함수 내에서 상태를 저장하거나 Random_int 와 같은 독립적 인 랜덤 라이브러리와 같은보다 현대적인 대안을 사용하는 것이 좋습니다.
MT_SRAND 및 JSON_ENCODE 의 조합을 통해 명확한 형식과 제어 가능한 결과로 JSON 데이터 샘플을 쉽게 구성 할 수 있습니다. 이 방법은 특히 테스트, 데모, 디버깅 및 기타 시나리오에 적합하며 개발에 큰 편의를 제공합니다. 이 기사의 예와 팁이 도움이되기를 바랍니다.