PHP 프로그래밍_php 기술에서 배열 포인터의 사용을 간략하게 이해합니다.
배열의 요소를 사용하려면 배열의 위치 지정이 필요합니다. 위치 지정 구현은 배열 포인터의 도움으로 완료되어야 합니다. PHP에는 배열 포인터를 이동하는 많은 함수가 있습니다. 아래에서 몇 가지를 소개하겠습니다.
포인터를 다음 배열 위치로 이동 next()
next() 함수는 현재 배열 포인터 바로 옆에 있는 배열 값을 반환합니다. 형태는 다음과 같습니다.
mixed next(array array)
예는 다음과 같습니다.
$fruits = array("apple", "banana", "orange", "pear"); echo next($fruits); echo next($fruits); // banana // orange
포인터를 앞으로 이동하거나 배열의 시작과 끝으로 직접 이동할 수도 있습니다.
포인터를 이전 배열 위치로 이동 prev()
prev() 함수는 현재 포인터의 이전 위치에 있는 배열 값을 반환합니다. 포인터가 원래 배열의 첫 번째 위치에 있으면 false를 반환합니다. 형태는 다음과 같습니다.
mixed prev(array array)
prev()의 사용법은 next()와 동일하므로 예제는 생략합니다.
포인터를 첫 번째 배열 위치로 이동합니다. Reset()
reset() 함수는 배열 포인터를 배열의 시작 부분으로 다시 설정하는 데 사용됩니다. 형태는 다음과 같습니다.
mixed reset(array array)
이 함수는 스크립트에서 배열을 여러 번 보거나 처리해야 하는 경우에 자주 사용됩니다. 또한 정렬이 끝날 때에도 자주 사용됩니다.
포인터를 마지막 배열 위치로 이동 end()
end() 함수는 포인터를 배열의 마지막 위치로 이동하고 마지막 요소를 반환합니다. 형태는 다음과 같습니다.
mixed end(array array)
다음 예에서는 첫 번째와 마지막 배열 값을 가져오는 방법을 보여줍니다.
$fruits = array("apple", "banana", "orange", "pear"); echo current($fruits); echo end($fruits); // apple // pear
함수 간에 배열이 매개변수로 전달될 때 다음과 같은 규칙이 있습니다. 함수가 호출될 때 시스템은 실제 매개변수의 복사본을 형식 매개변수(참조 호출 제외)에 복사하지만 배열의 경우 , 복사뿐만 아니라 실제 매개변수의 값을 얻고, 실제 매개변수 그룹의 현재 내부 포인터의 위치도 복사됩니다. 실제 매개변수의 내부 포인터 위치가 배열의 끝을 가리키는 경우 시스템은 형식 매개변수 그룹의 첫 번째 단위를 가리키도록 형식 매개변수의 내부 포인터를 재설정합니다. 실제 매개변수가 배열의 끝에 있지 않고 유효한 단위를 가리키면 시스템은 형식 매개변수의 배열 포인터 위치를 실제 매개변수의 배열 포인터와 동일한 값을 가진 배열 단위로 가리킵니다.
$arr['var6'] = 6을 수행하지 않으면 6개 변수($var1-$var6) 모두 값을 가지게 됩니다. 왜냐하면 각 변수 이후에 배열 포인터가 배열의 끝을 가리키고 그 이후에는 func() 함수가 호출되면 시스템은 $arrtmp의 배열 포인터가 첫 번째 요소를 가리키도록 재설정합니다. 그러나 $arr['var6'] = 6 작업 후에는 모든 것이 변경되었습니다. 이 작업은 $arr의 배열 포인터를 NULL을 가리키는 것에서 유효한 값으로 변경했습니다(할당 전후에 배열이 가리키는 주소 단위는 다음과 같습니다). 단지 할당 전에는 해당 주소 단위에 아무것도 없었으나 할당 후에는 6)이 되었다는 점입니다. 이렇게 하면 $arr의 배열 포인터가 유효한 단위를 가리키게 됩니다. func() 함수를 호출하면 시스템은 $arrtmp의 배열 포인터를 재설정하지 않습니다. .. 자신의 마지막 유닛을 가리키며 마찬가지입니다. 각 함수는 현재 배열 포인터의 위치부터 작동하기 시작합니다. 따라서 각 함수 작업의 첫 번째 결과 반환 값은 배열 포인터를 한 비트 더 아래로 이동시키는 $arrtmp 배열의 마지막 요소이므로 while 루프는 여기서 끝납니다. arrtmp ['var5']가 탐색되지 않아 결국 $var1-$var6이 NULL이 됩니다.
배열 할당 과정에서 할당하는 배열과 할당된 배열의 배열 포인터가 변경됩니다. 먼저 결론을 내린 다음 코드를 사용하여 이 결론을 증명합니다. $arrtmp=$arr; 이 할당 표현식에서는 $arr 할당 배열을 호출하고 $arrtmp 할당 배열을 호출합니다. 배열이 할당될 때 할당된 배열의 배열 포인터가 이미 배열의 끝을 가리키는 경우 할당된 배열의 배열 포인터는 할당 후 재설정되고 할당 중에 배열의 첫 번째 요소를 가리킵니다. , 할당된 배열의 배열 포인터는 배열을 가리키지 않습니다. 결국에는 유효한 배열 요소를 가리킵니다. 그러면 할당된 배열의 배열 포인터는 할당 후에 재설정되지 않고 원래 가리킨 요소가 됩니다. 유지됩니다. 할당 후 할당된 배열은 할당된 배열의 값을 가질 뿐만 아니라 할당된 배열의 배열 포인터도 해당 요소를 가리키며 할당된 배열도 자체적으로 동일한 값을 가진 요소를 가리킵니다.
데모1:
<?php $arr = array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5); while( list($key,$value) = each($arr) ) { if($value == 4) break; } var_dump(current($arr)); $arr1 = $arr; var_dump(current($arr)); var_dump(current($arr1)); ?>
demo1 的执行结果是:int(5) int(5) int(5) 。从这个结果可以看出,赋值前后$arr的数组指针位置没有发生任何变化,$arr1不仅值跟$arr相同,而且数组指针所指向的元素值也是相同的。现在 用上述结论来解释这个结果,在while循环中,有一个if判断语句,目的是不让$arr的数组指针指向数组末尾,而是保留在一个有效的位置。 在$value=4时会跳出循环,而each这个函数会将数组指针向前移动一位,这就导致了$arr的数组指针指向了第5个元素,所以在赋值之 前,current($arr)的结果是5,赋值之后,由于在赋值之前$arr的当前指针并没有指向末尾,因此在赋值之后不会将$arr的数组指针进行重 置,而是保留了其原有的位置,因此在赋值之后使用current($arr)的结果仍然是5。赋值时$arr1不仅获得了$arr的值,而且数组指针指向 的元素和$arr的相同,二者都是5。
<?php $arr = array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5); while( list($key,$value) = each($arr) ) { //if($value == 4) break; } var_dump(current($arr)); $arr1 = $arr; var_dump(current($arr)); var_dump(current($arr1)); ?>
demo2中我们将 if($value == 4) break; 这一句注释掉了,目的很简单,就是通过each将$arr的数组指针位置指向数组末尾。
demo2 的执行结果:bool(false) int(1) bool(false) 。如果数组指针对应的元素为0,"",或者不是一个有效的值时,current函数会返回false,$arr的值中没有为0或者""的情况,因此可以断 定是因为数组指针指向了一个无效的元素而导致current返回了一个false。换句话说就是可以确定在while循环完成之后,$arr的数组指针已 经指向了数组的末尾。所以我们看到在赋值之前current($arr)的值是false,而赋值之后current($arr)的值变成了1,说明赋值 之后$arr的数组指针被重置了,指向了数组的第一个元素。current($arr1)的值为false,说明赋值之后$arr1让然保留了赋值之 前$arr的数组指针指向的元素。
通过demo1和demo2就可以证明上述结论了。
因此为了在遍历数组时不受数组指针的影响,最好在使用each()函数之前或者之后调用函数reset()将数组指针重置。这样就可以避免上述问题的发生了。另外还有一个操作数组指针的函数prev(),它的作用是将数组指针当前的位置后退一位,它也需要注意一点,就是如果数组指针已经指向数组末尾,那么使它就得不到想要的结果了。
顺便说一下foreach这个函数,使用foreach函数来遍历数组时,它会重置数组指针,将其指向数组的第一个元素。必须注意的是foreach操作的对象是对你要遍历的数组的copy值,而不是遍历数组本身。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

숙련된 PHP 개발자라면 이미 그런 일을 해왔다는 느낌을 받을 것입니다. 귀하는 상당한 수의 애플리케이션을 개발하고, 수백만 줄의 코드를 디버깅하고, 여러 스크립트를 수정하여 작업을 수행했습니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.
