PHP 개발 중에 Array_Slice 는 일반적으로 사용되는 배열 작동 기능 중 하나입니다. 주로 배열에서 하위 배열을 추출하는 데 사용됩니다. 그러나 사용하면 매개 변수와 반환 결과의 세부 사항에주의를 기울이지 않으면 예기치 않은 버그를 쉽게 발생시킬 수 있습니다. 이 기사는 실제 예제와 함께이 "구덩이"를 공개하고 올바르게 피하는 방법을 가르쳐 줄 것입니다.
Array_Slice (array $ array, int $ offset,? int $ longth = null, bool $ preserve_keys = false) : 배열
$ 배열 : 작동 할 원래 배열
$ 오프셋 : 위치를 시작합니다
$ 길이 : 가로 채는 길이
$ preserve_keys : 원래 배열의 키 이름을 보존할지 여부 (기본값은 false , 즉 reindex)
예를 살펴 보겠습니다.
$data = [
'apple' => 1,
'banana' => 2,
'cherry' => 3,
'date' => 4,
];
$result = array_slice($data, 1, 2);
print_r($result);
다음이 출력 될 것이라고 생각하십니까?
Array
(
[banana] => 2
[cherry] => 3
)
실제로 출력은 다음과 같습니다.
Array
(
[0] => 2
[1] => 3
)
키 이름이 손실되는 이유는 무엇입니까? 그 이유는 네 번째 매개 변수 $ preserve_keys 의 기본값이 False 이므로 키 이름은 0 부터 시작하는 Index 키로 재설정되기 때문입니다.
array_slice를 호출 할 때 네 번째 매개 변수에 충족을 지정합니다.
$result = array_slice($data, 1, 2, true);
print_r($result);
출력은 원하는대로 다음과 같습니다.
Array
(
[banana] => 2
[cherry] => 3
)
이 단계는 특히 배열의 주요 이름 (양식 필드 처리, 구성 파일 등)에 의존 할 때이 매개 변수를 잊어 버리면 완전한 로직 오류가 발생할 수 있습니다.
예를 들어, 슬라이스 결과를 사용하여 새로운 키 값 구조를 구성합니다.
foreach (array_slice($data, 1, 2) as $key => $val) {
echo "$key => $val\n";
}
출력 할 것으로 예상되는 것은 다음과 같습니다.
banana => 2
cherry => 3
그러나 실제 출력은 다음과 같습니다.
0 => 2
1 => 3
이렇게하면 특히 $ Key를 일종의 식별자로 사용할 때 키 가치 종속성 로직 중 일부가 완전히 실패 할 수 있습니다.
Array_Slice를 사용하기 전에 스스로에게 물어보십시오.
키 이름에 관심이 있습니까? (연관 배열의 주요 이름은 일반적으로 매우 중요합니다)
결과는 원래 배열 키와 관련된 논리에 계속 사용됩니까?
대답이 "예"인 경우 $ preserve_keys = true를 설정하십시오.
더 안전한 버전의 캡슐화는 반복적 인 실수를 피할 수 있습니다.
function slice_assoc(array $array, int $offset, ?int $length = null): array {
return array_slice($array, $offset, $length, true);
}
그런 다음 사용하십시오 :
$result = slice_assoc($data, 1, 2);
명확하고 신뢰할 수 있으며 오류가 없습니다.
많은 CMS 및 프레임 워크에서 Array_Slice는 백그라운드 페이지 매김 또는 구성 배열 처리에 사용됩니다. 키가 유지되지 않으면 혼란을 유발하고 허가 검증 취약점을 유발할 수도 있습니다. 예를 들어, 특정 유형의 구성 항목에 대한 페이지 매김 인터셉트를 수행 할 때 키가 config_id 이고 정수 인덱스로 재설정되면 해당 구성이 정상적으로 일치하지 않습니다.
PHP 함수 사용에 대한 자세한 예방 조치는 https://gitbox.net/php-tips를 확인하십시오.