PHP는 개발에 있어 매우 효율적이므로 이해할 수 있지만 실행 효율성이 희생됩니다. php 배열 기능은 매우 강력하지만 만일의 경우에 대비하여 여러 가지 상황을 시도해 보아야 합니다. 앞으로 더 많은 문제가 발견되면 추가하겠습니다.
Foreach는 데이터나 개체의 내용을 쉽게 읽을 수 있는 배열을 탐색하는 간단한 방법을 제공합니다. 그러나 공식 문서에 따르면 foreach는 내부 배열 포인터에 의존하므로 루프에서 해당 값을 수정합니다. 예기치 않은 동작이 발생할 수 있습니다. 따라서 기본적으로
1. 루프 내부의 값을 수정하려고 하지 마세요. 그렇지 않으면 결과가 원하는 것 이상일 것입니다.
2. '&'는 거의 사용되지 않지만 안전한 방법입니다. 그러나 사용 시 참조가 끝난 후 즉시 unset 함수를 호출하여 변수를 소멸시켜야 합니다. 그렇지 않고 다음 코드에서 이 변수를 다시 사용하면 루프의 마지막 값이 수정되므로 예기치 않은 값이 발생합니다. 예를 들어, 목록이 루프 아웃되면 출력의 마지막 줄에 지저분한 값이나 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, 그 의미는 이전 문자열이 다음 배열에 존재하는지 확인하는 것이며, 대부분의 경우에도 이렇게 작동합니다. 다음 배열이 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를 참조하기 전에 변수가 배열인지 확인하는 것입니다.
PHP에서 foreach/in_array 사용에 대한 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!