배열 처리에 PHP를 사용하는 경우 Array_Map ()은 일반적으로 사용되고 강력한 기능입니다. 배열의 각 요소에 콜백 함수를 적용 할 수 있습니다. 이는 간단하고 우아합니다. 그러나 일일 개발에서 콜백의 어레이 또는 객체와 같은 비 스칼라 값을 처리하면 "버그처럼 보이지 않고 혼란스러운"동작을 발생시키고 오류를 유발할 수 있습니다. 이 기사를 사용하면이 숨겨진 위험이 심층적으로 이해되고 안전하게 다루는 방법을 이해하게됩니다.
PHP에서 스칼라 값은 다음과 같습니다.
int
뜨다
끈
부
스칼라 값 대신 다음을 포함합니다.
정렬
물체
의지
null (때로는 수)
비 스칼라 값을 array_map () 의 콜백 함수로 전달하고 함수에서 문자열 스 플라이 싱, 배열 인덱싱, JSON 인코딩 등으로 사용하는 기능에서 호환되지 않는 작업을 사용하면 오류를 트리거 할 가능성이 높습니다.
다음 예를 살펴 보겠습니다.
<code> $ data = [[ 'name'=> 'tom'], [ 'name'=> 'jerry'], [ 'name'=> 'spike'],]; $ result = array_map (function ($ item) {
'안녕하세요'를 반환합니다. $ 항목;
}, $ data);
</코드>
출력을 기대할 수 있습니다.
[
"Hello, Tom",
"Hello, Jerry",
"Hello, Spike"
]
그러나 실제로이 코드는 오류가 발생합니다.
Warning: Array to string conversion
$ 항목은 배열이기 때문에 문자열과 직접 배열을 스플 라이스 할 수 없기 때문입니다. PHP는 수동으로 처리하지 않는 한 배열을 문자열로 암시 적으로 변환 할 수 없습니다.
이를 피하려면 스칼라 값을 다루거나 콜백에서 비 스칼라 값을 명시 적으로 처리하는지 확인하십시오.
산출:
[
"Hello, Tom",
"Hello, Jerry",
"Hello, Spike"
]
산출:
[
"Data: {\"name\":\"Tom\"}",
"Data: {\"name\":\"Jerry\"}",
"Data: {\"name\":\"Spike\"}"
]
이 방법은 디버깅 중에 구조를 빠르게 볼 때 적합하지만 비즈니스 로직에서는주의해서 사용하는 것이 좋습니다.
비 스칼라 값은 사용자가 데이터 입력을 처리하거나 외부 API에 의해 반환 할 때 더 일반적입니다. 예를 들어 다음 인터페이스를 통해 데이터를 가져옵니다.
<code> $ data = json_decode (file_get_contents ( 'https://m66.net/api/users'), true); </코드>반환 구조는 배열 중첩 어레이 일 수 있습니다. 현재 구조를 확인하지 않고 $ 데이터 에 Array_Map ()을 직접 사용하는 경우 포인트를 밟을 가능성이 높습니다.
Array_Map () 는 효율적이고 우아한 도구이지만 콜백 기능이 들어오는 값을 올바르게 처리 할 수 있다고 가정합니다. 비 스칼라 값으로 전달하지만 스칼라로 처리하는 경우 런타임 오류 또는 논리적 오류가있을 수 있습니다. 다음 사항을 기억하십시오.
콜백 함수에 들어오는 값의 데이터 유형에 대한 예측이 있는지 확인하십시오.
배열 또는 객체에서 암시 적 문자열 처리를 피하십시오.
외부 데이터는 먼저 구조화 된 다음 처리됩니다.
덜 쓰면 실수가 줄어 듭니다. 더 깊이 이해할수록 더 안정적으로 사용합니다. 이 기사 가이 "작은 구덩이"를 명확하게보고 PHP 코드를 더욱 강력하게 만드는 데 도움이되기를 바랍니다.