PHP는 개발에 있어 매우 효율적이므로 이해할 수 있지만 실행 효율성이 희생됩니다. php 배열 기능은 매우 강력하지만 만일의 경우에 대비하여 여러 가지 상황을 시도해 보아야 합니다. 앞으로 더 많은 문제가 발견되면 추가하겠습니다.
foreach는 배열을 탐색하는 간단한 방법을 제공하고 데이터나 객체의 내용을 쉽게 읽을 수 있습니다. 그러나 공식 문서에는 foreach가 내부 배열 포인터에 의존하기 때문에 해당 값이 수정된다고 나와 있습니다. 루프에서 예기치 않은 동작이 발생할 수 있습니다. 그래서 기본적으로
1. 루프 내부의 값을 수정하려고 시도하지 마세요. 그렇지 않으면 결과가 원하는 것을 초과하게 됩니다.
2. '&'를 사용하는 것은 안전한 방법이지만, 사용하는 경우에는 참조가 끝난 직후에 unset 함수를 호출하여 변수를 파기해야 합니다. 그렇지 않으면 다음 코드에서 다른 If가 있는 경우입니다. 이 변수를 사용하면 루프의 마지막 값이 수정되어 예상치 못한 값이 발생합니다. 예를 들어 목록 루프가 출력되면 출력의 마지막 줄에 지저분한 값이나 null 값이 많이 나타납니다. unset을 사용하면 이 문제가 해결됩니다.
예제를 살펴보겠습니다
<?php /*-------------------------------------------------------------------------*/ /* foreach example 1: value only */ echo "foreach example 1: value only ".'<br />'; $a = array(1, 2, 3, 17); foreach ($a as $v) { echo "Current value of ".$a.":". $v."<br />"; } ?> // 运行结果 foreach example 1: value only Current value of $a: 1 Current value of $a: 2 Current value of $a: 3 Current value of $a: 17
in_array,다음 배열에 이전 문자열이 존재하는지 확인한다는 의미이며, 대부분의 경우에도 이와 같이 작동하지만, 다음 배열이 배열( 0,1,2,3), 문제가 있습니다. PHP는 이전 문자열을 삽입하므로 값이 0이 됩니다. 그런 다음 우연히 배열에 이 값이 있으면 방정식이 설정됩니다. 또 기대 이상?
따라서 다음 데이터가 정수라고 판단되는 경우, 특히 0일 수 있는 경우(모든 문자열을 대체할 수 있음) 더 이상 이 함수를 사용하지 않아야 하며 대신 key_exists를 사용할 수 있지만 다음 데이터를 사용해야 합니다. array_flip은 반전 작업을 수행합니다.
다른 예를 살펴보겠습니다
function search($keyWord, $stack) {//此处判断是应该更新还是插入 foreach ($stack as $key => $val) { if (in_array($keyWord, $val)) { return TRUE; } } return FALSE; }
문자열을 배열로 사용하여 값을 얻으면 어떻게 되나요? PHP는 내결함성이 매우 뛰어난 언어입니다. 실수를 바로잡도록 최선을 다하므로 참조 첨자를 정수로 현명하게 변환합니다. 그러면 문자열 첨자는 0이고 값은 You입니다. 첫 번째 문자열의 값을 얻게 됩니다. 예상을 뛰어넘는 것인가요? 해결 방법은 아래 첨자 is_array를 참조하기 전에 변수가 배열인지 확인하는 것입니다.
이런 저런 문제를 접하고 계속해서 이야기를 나누는 선배들이 많지만, 우리는 여전히 피할 수 없는 일이고 결국 계속해서 실수를 저지르고 있습니다. 어쩌면 이것이 사회일지도 모른다! 모두가 너무 바빠서 어떻게 당신의 진부한 코드를 해독할 시간을 가질 수 있습니까? ㅎㅎ