PHP는 유망하고 현대적입니다. 고품질 구문과 허용된 것 이상의 의미를 수행하는 능력입니다. 객체 지향 프로그래밍 아이디어의 구현과 변수 유형을 자유롭게 변경할 수 있으므로 여러분의 상상이 현실이 됩니다.

배열은 고대 디자인이며 연관 배열은 연습의 요구 사항이라기보다는 시대에 대한 찬사입니다. 루프에서 보고 사용할 수 있는 미리 결정되지 않은 콘텐츠(수량, 값, 유형 및 인덱스)의 데이터 컬렉션을 생성하는 작업이 충분하지만 배열의 마지막 요소는 다음을 사용하여 사용할 수 있습니다. 어떤 생성 방법이든. 배열(일반 및 연관)을 사용하면 목록을 만들 수 있지만 일반 PHP 구문에서는 사용이 제한됩니다.

현재 배열 값

인덱스에서 추상화하고 구성을 사용하면

$arData = 새로운 scField(); // scNumber, scString, scParagraph, ...

여기서 scField()는 추상 개체의 생성자입니다. 즉, 숫자(scNumber), 문자열(scString), 구문(scParagraph) 등의 하위 항목이 있는 "정보 요소"입니다. PHP에서는 마지막 요소 = 배열을 얻습니다. 실제 요소로서의 속성을 나타내는 객체.

기본적으로 어떤 요소가 관련성이 있다고 간주되는지는 중요하지 않지만 이 경우 배열 내부의 포인터(PHP에서는 커서)를 추적해야 합니다. 더 자주 - 당신은 가지고 있어야합니다 자신의 포인터요소. PHP의 "마지막 요소 = 배열" 개념에는 커서가 필요하지 않습니다. end() 및 array_pop() 함수를 통해 액세스할 수 있는 마지막 요소는 해당 속성을 배열에 위임합니다. 또한 array_pop()을 사용하면 자동으로 배열이 이전 요소로 팝되고 해당 속성이 그에 따라 변경됩니다. 이렇게 하면 요소 사이를 이동할 수 있습니다.

따라서 PHP 구문을 컨텍스트에 배치한다는 것은 실제로 배열의 마지막 요소를 검색한다는 것은 해당 속성을 사용한다는 것을 의미합니다. 지속적으로 요소를 배치하고 제거함으로써 우리는 속성의 역학, 사용 가능한 구문의 한계 내에서 형성된 새로운 속성의 역학을 얻습니다.

첫 번째 및 기타 요소

배열의 첫 번째 요소로 작업하고 내부 포인터를 이동하는 함수가 있습니다. 고전적인 프로그래밍 방식을 구현하는 일반 구문에서는 적용 가능합니다. 동적으로 변화하는 의미를 가진 배열 생성과 관련하여-아니요.

프로그래밍에서 우리는 항상 결정을 내리는 것에 대해 이야기합니다. 변수는 값을 취하고, 조건문은 알고리즘 과정을 변경하고, 루프는 무언가를 분석하고 궁극적으로 결과가 생성됩니다.

무게 중심을 요소 자체로 이동하고 요소 자체가 결정하도록 하면 프로그램 구현이 완전히 다른 의미 있는 모습을 갖게 됩니다. 대부분의 경우 이 방법을 사용하면 특히 Open XML 표준으로 작성된 수많은 *.docx 문서 태그를 사용하는 경우 목표를 달성할 수 있습니다.

PHP에서 배열의 마지막 요소를 얻는 것은 새로운 의미와 좋은 가능성을 갖습니다.

파일 및 배열 속성의 동적 로드

사이트에서 모든 파일을 다운로드할 수 있는 기능을 제공하는 경우 추상 개체(예: scFile 및 해당 하위 항목 scImage, scDocument, scTabe)의 아이디어를 사용하는 것이 편리합니다. 이는 동일한 속성을 갖지만 그 표현과 의미는 (내용)은 다를 것입니다. PHP 구문(마지막 요소 = 배열)의 맥락에서 end() 함수를 사용하면 마지막 요소가 정의하는 대로 사용할 수 있습니다. 이 솔루션은 일반적인 표현을 반전시키고 형성된 데이터 구조를 탐색할 수 있게 해준다는 점에서 흥미롭습니다.

이러한 배열 사용은 완전히 새로운 콘텐츠를 제공합니다. 이는 PHP 구문에서 제공되지만 이 방식을 사용하면 많은 가능성이 열립니다.

시각화, 데이터베이스 저장, 작업 상태로 복원(예:) 방법을 제공하면 특정 경우에 무엇을 해야 할지 생각할 필요가 없습니다. 다운로드한 모든 파일은 순차적으로 배열에 배치되며, 처리될 때 항상 동일한 방식에 따라 동일한 메소드가 호출되지만 이미지 파일은 그대로, 스프레드시트 파일은 테이블로, 문서는 테이블로 표시됩니다. 해당 텍스트. PHP 구문을 통해 액세스할 수 있는 배열의 마지막 요소에는 해당 속성과 특정 콘텐츠가 포함되어 있습니다.

후자의 경우 문서에는 항상 문자, 줄, 숫자 및 가장 중요한 서식이 포함됩니다. 각 요소를 추적하는 것은 어렵지만 각 형식 요소에 대해 적절한 개체를 제공하면 아무 생각 없이 문서를 있는 그대로 얻을 수 있습니다.

구문 내 스택 및 재귀

마지막 요소로만 작업할 때 주요 조건은 스택이지만, 이 요소가 실행되고 동일한 구성이 그 안에, 특히 그 자체에 사용되면 재귀입니다. 예를 들어 PHPWord와 같은 PHPOffice 라이브러리에 대해 많은 좋은 점을 말할 수 있지만 소스 문서 형식을 결과로 변환하는 본격적인 메커니즘을 구현한다고 말할 수는 없습니다.

실제로 PHPOffice\PHPWord를 사용하면 모든 Word 문서(*.docx)를 열 수 있지만 이는 구조화된 많은 XML 파일, 그림, 개체 등의 아카이브일 뿐입니다.

동시에 xml 파일만 가져오면 (스타일, 표, 그림 측면에서) 서로 연결되어 있지만 생성할 수 없습니다. 새 문서이전 버전을 기반으로 원하는 변경 사항을 간단히 전송하세요(예: 글꼴, 색상, 서식 변경). Open XML 태그를 사용하는 데는 다양한 옵션이 있으며 MS Word와 같이 잘 작동하는 제품이라 할지라도 항상 사용자의 아이디어에 대처하지 못하고 실수를 합니다.

실제로 *.docx 파일은 명확하고 이해하기 쉬운 구조를 갖춘 zip 아카이브입니다. 적은 수의 객체를 사용하여 이를 공식적으로 설명하고 읽을 때 의미론적으로 조작할 수 있는 완전한 독립 데이터 구조를 얻을 수 있습니다.

이 경우 문서의 정보는 공식적인 데이터 구조입니다. 역동성을 부여함으로써 구문에서 의미와 추상의 수준으로 쉽게 이동할 수 있습니다.

Reg.ru: 도메인 및 호스팅

러시아 최대의 등록기관 및 호스팅 제공업체입니다.

2백만 개 이상의 도메인 이름이 서비스 중입니다.

프로모션, 도메인 메일, 비즈니스 솔루션.

전 세계 70만 명 이상의 고객이 이미 선택을 했습니다.

부트스트랩 프레임워크: 빠름 적응형 레이아웃

Bootstrap 프레임워크의 적응형 레이아웃 기본 사항에 대한 단계별 비디오 과정입니다.

강력하고 실용적인 도구를 사용하여 간단하고 빠르고 효율적으로 레이아웃하는 방법을 알아보세요.

주문하고 대금을 받을 수 있는 레이아웃입니다.

*스크롤을 일시중지하려면 마우스를 올리세요.

뒤로 앞으로

PHP: 배열 요소 제거

우리는 배열 요소를 제거하는 것처럼 겉으로는 사소해 보이는 작업에 직면해 있습니다. 또는 여러 요소.

그러나 모든 단순성에도 불구하고 완전히 명확하지 않은 옵션이 있으며 "Hello, world!"보다 PHP를 조금 더 발전시키고 싶다면 알아 둘 가치가 있습니다.

기본 자체부터 시작해 보겠습니다. 하나의 요소를 제거하려면 다음 함수를 사용해야 합니다. 설정되지 않음():

설정 해제($array); unset($array["foo"]);

설정 해제($array, $array); unset($array["foo"], $array["bar"]);

다음 논리적 질문은 서로 이어지는(즉, 인접한) 여러 요소를 제거하는 방법입니다. 여러 개의 인접한 요소를 제거하려면 다음 기능을 사용하십시오. array_splice():

Array_splice($array, $offset, $length);

이러한 기능을 사용하면 해당 요소에 대한 모든 참조가 사라집니다. 키를 배열에 남겨두고 연결하고 싶은 경우 빈 값, 원하는 요소에 빈 문자열을 할당합니다.

$array = $array["foo"] = "";

기능을 이해하는 것이 중요합니다. 설정되지 않음()요소에 ""를 할당하면 요소가 제거되지 않지만 해당 값이 빈 문자열과 동일해집니다.

숫자로 작업하는 경우 값 0을 해당 키와 연결하는 것이 더 나을 것입니다.

회사가 HBL-568 모델의 부품 생산을 중단한 경우 부품 배열을 변경할 수 있다고 가정해 보겠습니다.

Unset($products["HBL-568"]);

HBL-568 부품의 재고가 일시적으로만 없고 공장에서 도착할 것으로 예상되는 경우에는 다르게 수행하는 것이 좋습니다.

$products["HBL-568"] = 0;

다음으로 이해해야 할 점은 함수를 호출할 때 설정되지 않음()배열 요소의 경우 PHP는 루프가 여전히 올바르게 작동하도록 배열을 조정합니다.

즉, 배열은 결과 "구멍"을 채우기 위해 압축되지 않습니다. 본질적으로 이는 언뜻 숫자로 보이더라도 모든 배열이 연관되어 있음을 의미합니다. 이 동작을 설명하는 명확한 예를 살펴보겠습니다.

// "숫자" 배열 생성 $animals = array("ant", "bee", "cat", "dog", "elk", "fox"); $animals를 인쇄하세요. // "bee"를 인쇄합니다. print $animals; // "고양이"를 인쇄합니다. count($animals); // 6을 반환합니다. // unset() unset($animals); // 요소 제거 $animals = "bee" print $animals; // 아무것도 출력하지 않고 오류를 발생시킵니다. E_NOTICE print $animals; // "고양이"를 인쇄합니다. count($animals); // $array 요소가 그대로 유지되고 "fox"를 포함하는 동안 5를 반환합니다. // 새 요소 추가 $animals = "gnu"; // 새 요소를 추가합니다. print $animals; // 아무것도 인쇄하지 않고 오류도 발생합니다. E_NOTICE print $animals; // "gnu"를 인쇄합니다. count($animals); // 6을 반환합니다. // ""(빈 문자열) 할당 $animals = ""; // "빈 문자열"로 설정 print $animals; // "" 출력 count($animals); // 6을 반환합니다. 즉, 계산할 때 빈 배열 요소를 고려합니다.

밀도가 높은 숫자 배열을 얻으려면 다음 함수를 사용하십시오. 배열_값():

$동물 = 배열_값($동물);

또한 array_splice() 함수는 "구멍"을 제거하기 위해 배열을 자동으로 다시 인덱싱합니다.

// "숫자" 배열 생성 $animals = array("ant", "bee", "cat", "dog", "elk", "fox"); array_splice($animals, 2, 2); print_r($동물);

출력에서 우리는 다음을 얻습니다:

배열( => 개미 => 벌 => 엘크 => 여우)

이 기능은 어디에 유용할까요?

배열을 대기열로 사용하여 실수로 결과 "구멍" 중 하나에 빠질 수 있는 경우 무작위 액세스 가능성을 잃지 않고 이 대기열에서 요소를 제거하고 싶다고 가정해 보겠습니다.

마지막으로 배열에서 첫 번째 또는 마지막 요소를 안전하게 제거하려면 다음 함수를 사용하세요. 배열_시프트()그리고 배열_팝()각기.

모든 것이 매우 간단합니다.

$stack = array("오렌지", "바나나", "사과", "라즈베리"); $fruit = array_shift($stack); print_r($스택);

위의 코드를 실행한 결과 다음과 같은 결과를 얻게 됩니다.

배열( => 바나나 => 사과 => 라즈베리)

마지막 요소를 제거하려면 다음 함수를 사용하십시오. 배열_팝():

$stack = array("오렌지", "바나나", "사과", "라즈베리"); $fruit = array_pop($stack); print_r($스택);

출력은 다음 배열 출력입니다.

배열( => 주황색 => 바나나 => 사과)

그게 다야. 우리는 PHP에서 배열 요소를 삭제하는 방법에 대한 주요 사항을 논의했습니다. 어떤 일이 발생하면 공식 문서가 항상 도움이 됩니다.

자료가 마음에 들었고 감사 인사를 전하고 싶으신가요?
친구나 동료들과 공유해보세요!


참조:

PHP 배열은 어디에서나 사용됩니다. 값을 추가하고 변경하는 것은 일반적으로 간단합니다.

배열 요소를 제거하는 것은 특별한 작업입니다. 단순히 요소를 삭제해도 되고, 삭제하고 사용해도 됩니다. 이 뉘앙스는 좋은 기회를 제공합니다.

PHP 배열

PHP는 현대 언어프로그래밍, 배열 작업과 관련된 기능은 높은 수준에서 수행됩니다. 프로그래머는 일반 배열과 연관 배열을 사용하고, 다차원 데이터 구조를 설계하고, 모든 유형의 값을 배열 요소로 가질 수 있는 기회를 갖습니다.

배열 및 특수 구문 구성 작업을 위해 개발된 함수 세트가 있습니다. 자신만의 알고리즘을 사용하여 배열을 탐색하고 자신만의 처리 기능을 할당하는 것이 가능합니다.

배열 생성 및 사용 예

scPrint 기능은 보조 기능입니다. 생성된 결과를 보여주기 위해 배열을 문자열에 재귀적으로 기록합니다.

$aFruits 배열은 일반적인 방법으로 생성됩니다. 값이 나열되고 인덱스가 처음부터 자동으로 할당됩니다. 마지막 쉼표는 관련이 없으며 다른 빈 요소를 생성하지 않습니다.

$aData 배열은 빈 상태로 생성된 다음 값이 추가됩니다. 세 개는 자동이고 두 개는 값의 전체 번호 매기기에 영향을 주지 않는 연관 색인을 사용합니다. 따라서 "plum"과 "peach" 요소는 각각 "new"와 "fresh"라는 인덱스를 갖습니다.

$aInfo 배열은 다차원적이고 연관적입니다.

세 가지 삭제 작업은 PHP 배열에서 요소를 제거하는 방법을 보여줍니다.

첫 번째 작업은 $aFruits 배열에서 두 번째 요소를 제거하며 해당 인덱스는 1입니다. 다음 인덱스는 이동되지 않습니다. 이는 이러한 배열을 사용한 순환 작업에서 요소의 존재를 확인해야 함을 의미합니다. .

두 번째 작업은 $aData 배열의 마지막 요소와 첫 번째 요소를 삭제합니다. 이는 삭제가 인덱스에 영향을 주지 않으며 여러 요소를 동시에 삭제할 수 있음을 확인합니다.

세 번째는 배열 내의 배열과 다른 배열의 일부인 배열 내의 요소를 삭제합니다.

요소의 정상적인 제거 - 설정되지 않음

설정되지 않은 기능은 제거됩니다. 무엇이든 상관없습니다. 변수일 수도 있고 배열 요소일 수도 있습니다. unset()은 함수가 아닌 언어 연산자로 간주됩니다. 이 연산자는 어떤 값도 반환하지 않으며 매개변수로 전달된 것을 "파괴"합니다. 변수나 배열은 존재하지 않았던 것처럼 사라집니다.

PHP에서는 다양한 방법으로 빈 배열 요소를 제거할 수 있습니다. 실제로 빈 요소로 간주되는 요소는 프로그래머에 따라 다릅니다. 그러나 이 목적을 위해 unset() 연산자에서 여러 매개변수를 사용하는 것은 그다지 현명하지 않습니다. 그룹 작업을 그룹 기능으로 이동하는 것이 더 실용적입니다.

최신 컴퓨터는 매우 빠르며 PHP도 매우 빠릅니다. 그러나 이는 번거로운 알고리즘을 사용하여 수많은 정보를 생성하고 처리하는 이유가 아니며, 이는 점진적인 방식으로 배열 요소를 제거하는 프로세스에 접근하는 객관적인 이유입니다.

문자열 메서드를 사용하여 요소 제거

PHP에서는 배열을 문자열로 변환하고 다시 반환하여 빈 배열 요소를 대량으로 제거할 수 있습니다. 그러나 이 경우는 실제로 비어 있는 요소, 누락된 인덱스 또는 배열을 다시 인덱싱하려는 목적에만 적합합니다.

빈 요소의 개념은 작업에 따라 다릅니다. 특정 정보가 포함된 기존 배열 요소가 비어 있는 경우가 많습니다. 예를 들어 배열은 방문자를 기록합니다. 배열 요소에는 다음이 포함됩니다.

  • 방문자 도착 시간;
  • 현재 작동 모드;
  • 활성 페이지;
  • 시간 마지막 행동.

도착 시간과 마지막 작업 시간의 차이가 1분(또는 다른 값) 이상인 경우 클라이언트가 사이트를 떠났다고 가정할 수 있습니다. 작업이 활성 방문자 목록을 모니터링하고 JavaScript를 사용하는 고급 방법을 사용하지 않는 경우 해당 클라이언트에 대한 기록을 삭제할 수 있습니다.

그러나 "선"처리는 좋습니다. 예를 들어, PHP에서는 다음과 같이 중복된 배열 요소를 제거할 수 있습니다.

빠르고 저렴한 방법. 각 요소를 표시하기 위해 "[" 및 "]" 기호를 사용할 필요는 없지만 배열을 문자열로 변환할 때는 각 요소가 고유한지 확인해야 합니다. 프레임 문자는 요소에 허용되는 문자를 기준으로 선택해야 합니다. 흔들리지 않는 규칙: 행의 각 배열 요소는 고유하고 해당 위치를 갖습니다(그렇지 않으면 아무것도 반환될 수 없음).

이 방법은 PHP의 작업이 값별로 배열 요소를 제거하는 것일 때 더 편리합니다. array_flip 함수를 사용하여 값과 키를 바꾼 다음 일반적인 설정 해제를 수행할 수 있습니다. array_search 함수를 사용하여 제거하려는 값의 키를 찾을 수 있습니다. 그러나 솔루션의 소문자 버전이 더 명확하고 간단합니다.

PHP는 실제로 차원 수나 요소 크기 등 개발자를 제한하지 않습니다. 이것에 관여하는 것은 의미가 없습니다. 각 요소는 가능한 최소 길이여야 하며 차원 수는 1개에 가까워야 합니다.

배열 차원의 수가 3개보다 많으면 이는 결정을 다시 고려해야 할 좋은 이유입니다. 배열 요소가 4000-8000자를 초과하는 경우 구성된 데이터 그림의 합리성에 대한 의문이 제기됩니다.

이 의견은 PHP 배열 기능의 맥락에서 나온 것이 아닙니다. 즉, 요소를 제거하고, 다른 유형의 객체를 추가하고, 하나를 완전히 다른 것으로 변경합니다. 단순성은 인생뿐만 아니라 알고리즘에서도 성공의 열쇠입니다. 프로그램은 작동해야 하며 아이디어의 규모, 크기 및 규모에 놀라지 않아야 합니다. 중요한 것은 큰 아이디어가 아니라 결과입니다.

현대 언어처럼 PHP 프로그래밍재귀 및 스택을 우회하지 않습니다. 프로그래머가 PHP에서 array_pop() 함수를 사용할 때 의미하는 바는 근본적으로 중요하지 않습니다. 배열의 마지막 요소를 제거하거나 간단히 변수에 넣습니다.

하지만 이 맥락에서 array_pop 함수는 push & pop 함수, 즉 삭제 도구가 아닌 스택 도구라는 점을 명심하세요.

여기서는 "삭제"가 아니라 "추출"이라고 말하는 것이 일반적입니다. 의미론은 상당히 다릅니다. 그러나 PHP의 array_shift() 함수(배열의 첫 번째 요소 제거 또는 추출)는 다른 의미를 갖습니다. 여기에서도 요소가 외부 변수로 검색되어 배열에 포함되지 않지만 인덱스가 이동됩니다.

배열에서 첫 번째 요소가 추출되면 그 뒤의 모든 요소가 앞으로 이동하지만 숫자 인덱스만 변경되고 소문자 인덱스는 변경되지 않습니다.

삭제 또는 변경: 거래 내역

변수는 아주 오래 전이고, 배열은 오래 전이고, 객체는 어제입니다. 객체 지향 프로그래밍은 여전히 ​​이야기만 할 뿐 그 잠재력을 최대한 활용하는 것은 없습니다. 피상적인 솔루션이 열정적인 솔루션과 '몸매'가 많은 '현명한' 콘텐츠 관리 시스템(CMS)의 주제가 된 경우는 드물다.

객관적인 규칙: 중요한 것은 코드의 양이 아니라 품질입니다! 그러나 현대 CMS는 아직 이 규칙을 준수하지 않습니다. 그 저자는 자신이 옳은 일을 하고 있다고 믿으며 자신이 무엇을 하고 있는지 알고 있습니다.

결과(특징): 최신 CMS 중 어느 것도 괜찮은 "모양"(디자인의 가늘고 가벼움)으로 구별되지 않으며 모두 엄청난 코드 완성도를 가지며 각각 존중을 요구합니다.

  • 우수한 프로그래머;
  • 설치가 필요합니다.
  • 호스팅 요구 사항을 부과합니다.
  • 다른 호스팅으로 이동할 때 어려움을 겪습니다.
  • 작업과 관리 속도가 정말 느려집니다.

프로그래머들은 아주 오랫동안 롤백 개념을 생각해 왔습니다. 현대 프로그래밍에서는 롤백 생성에 대해 생각하지 않습니다. 소프트웨어두 가지 기능 없이:

  • 끄르다;
  • 다시 하다.

실수를 저지르는 것은 인간의 본성일 뿐만 아니라, 어떤 상황에서도 롤백이 반드시 있습니다. 오늘날 현대 인터넷 프로그래밍 도구에서는 이 점이 중요하지 않을 뿐만 아니라 매우 제한된 규모로 사용됩니다.

배열에 대한 PHP 작업: 요소 제거, 유형 변경 또는 새로운 항목 추가는 명확합니다. 하지만 그 전에는 변수가 있었고 그 다음에는 배열, 그 다음에는 객체가 있었습니다. 배열은 시간이 지남에 따라 단지 변수일 뿐이라는 사실을 생각해 볼 이유가 있지 않나요?

배열은 시간에 따른 데이터 구조입니다. 오늘날까지 어떤 언어도 시간을 구문의 요소로 고려하지 않습니다. 의미론에 대해 말할 필요조차 없습니다. 고대부터 오늘날까지 프로그래머와 사용자는 파일과 폴더만 이해합니다. 예를 들어 PHP에서 개발의 최대치에 도달한 네임스페이스는 폴더와 파일의 구조에 사소하게 반영됩니다.

이러한 맥락에서 배열에 대한 PHP의 일반적인 작업(요소 제거, 변경 또는 추가)에는 프로그래머의 추가 작업이 필요합니다. 모든 것을 그대로 놔두면 언제나처럼 문제가 해결될 것입니다. 데이터에 대한 모든 작업을 고려하고 이를 전체적으로 기록하고 작업 기록을 생성 및 저장할 수 있습니다.

이것은 완전히 다른 수준의 작업이 될 것이며 근본적으로 최고의 품질결과.

키 출력(24)

일부 매개변수를 사용하여 SQL 쿼리 생성기를 작성 중입니다. Java에서는 단순히 배열의 길이로 배열의 현재 위치를 확인하여 for 루프에서 배열의 마지막 요소를 감지하는 것이 매우 쉽습니다.

For(int i=0; i< arr.length;i++){ boolean isLastElem = i== (arr.length -1) ? true: false; }

PHP에는 배열에 액세스하기 위한 정수가 아닌 인덱스가 있습니다. 따라서 foreach 루프를 사용하여 배열을 반복해야 합니다. 이는 결정을 내려야 할 때 문제가 됩니다(제 경우에는 쿼리를 작성할 때 or/and 매개변수를 추가합니다).

이를 수행하는 표준 방법이 있어야 한다고 확신합니다.

PHP에서는 이 문제를 어떻게 해결하나요?

답변

다음과 같이 할 수도 있습니다.

끝($요소); $endKey = 키($elements); foreach ($elements as $key => $value) ( ​​​​if ($key == $endKey) // -- 이것이 마지막 항목입니다 ( // 뭔가를 하세요 ) // 추가 코드 )

INSERT를 사용하여 여기에 표시된 쿼리를 만들 수도 있습니다.

"월요일","2"=>"화요일","3"=>"수요일","4"=>"목요일","5"=>"금요일","6"=>"토요일"," 일곱"=>"일요일");

$keys = array_keys($week);

$string = "my_table에 삽입(""; $string .= implode("","", $keys); $string .= "") VALUES (""; $string .= implode("","" , $주); $string .= "");";

에코 $string; ?>

나는 이 "XY 문제"의 근본 원인이 OP가 단순히 implode() 함수를 원했다는 강한 느낌을 받았습니다.

EOF 배열을 찾으려는 의도는 단지 접착제일 뿐이기 때문입니다. 아래에서 전술을 확인하세요. EOF가 필요하지 않습니다.

$given_array = array("column1"=>"value1", "column2"=>"value2", "column3"=>"value3"); $glue = ""; foreach($given_array as $column_name=>$value)( $where .= " $glue $column_name = $value"; //글루 추가 $glue = "AND"; ) echo $where;

SQL 쿼리를 생성하는 시나리오나 첫 번째 또는 마지막 요소에 대해 다른 작업을 수행하는 모든 경우에는 불필요한 변수 검사를 사용하지 않는 것이 훨씬 빠릅니다(거의 두 배 빠름).

현재 허용되는 솔루션은 루프와 모든 단일 반복이 수행되는 루프 내부 검사를 사용합니다. 이를 수행하는 올바른(빠른) 방법은 다음과 같습니다.

$numItems = 개수($arr); $i=0; $firstitem=$arr; $i++; 동안($i<$numItems-1){ $some_item=$arr[$i]; $i++; } $last_item=$arr[$i]; $i++;

소규모 가정 테스트에서는 다음과 같은 결과가 나타났습니다.

테스트1: 영안실 모델 100,000회 실행

시간: 1869.3430423737밀리초

test2: 최신 모델인 경우 100,000번의 모델 실행

시간: 3235.6359958649밀리초

나는 그것이 꽤 깔끔하다고 느끼기 때문에 다음을 좋아합니다. 모든 요소 사이에 구분 기호가 있는 문자열(예: a, b, c)을 생성한다고 가정해 보겠습니다.

$첫 번째 = 사실; foreach ($items를 $item으로) ( $str = ($first)?$first=false:", ".$item; )

$page_comment): ?>

toEnd가 0에 도달하면 루프의 마지막 반복에 있음을 의미합니다.

$toEnd = 개수($arr); foreach($arr as $key=>$value) ( ​​​​if (0 === --$toEnd) ( echo "마지막 인덱스! $value"; ) )

마지막 값은 루프 후에도 여전히 사용할 수 있으므로 루프 후 더 많은 작업에 사용하려는 경우 다음이 더 좋습니다.

Foreach($arr as $key=>$value) ( ​​​​//something ) echo "마지막 인덱스! $key => $value";

마지막 값을 특수 내부 루프로 처리하고 싶지 않은 경우. 큰 배열이 있는 경우 이 방법이 더 빠릅니다. (동일한 범위 내에서 루프 후에 배열을 재사용하는 경우 먼저 배열을 "복사"해야 합니다).

//네임스페이스나 함수가 없는 대규모 전역 코드에서 이것을 사용하는 경우 당신은 할 수다음과 같이 배열을 복사하십시오: //$array = $originalArrayName; //이 루프 다음에 사용할 수 있는 배열을 복사하려면 주석 처리를 제거하십시오. //end($array); $lastKey = 키($array); //키를 사용하는 경우 주석 처리를 취소합니다. $lastValue = array_pop($array); //다른 모든 값을 처리하기 전에 여기서 마지막 값으로 특별한 작업을 수행하시겠습니까? echo "마지막은 $lastValue입니다", "\n"; foreach ($array as $key => $value) ( ​​​​//마지막 값 이전의 모든 값에 대해 작업을 수행합니다. echo "마지막 값을 제외한 모든 항목: $value", "\n"; ) //특별한 작업을 수행합니다. 다른 모든 값을 처리한 후 여기에 마지막 값이 있습니까? echo "마지막은 $lastValue입니다", "\n";

그리고 원래 질문에 답하려면 "제 경우에는 쿼리를 작성할 때 or/and 매개변수를 추가하세요"입니다. 이는 모든 값을 포함하고 그 사이에 "and"가 있는 문자열로 연결하지만 첫 번째 값 앞이나 마지막 값 뒤는 아닙니다.

$params = ; foreach ($array as $value) ( ​​$params = doSomething($value); ) $parameters = implode(" and ", $params);

이 방법을 계속 사용할 수 있습니다. 연관 배열:

$keys = array_keys($array); for ($i = 0, $l = 개수($array); $i< $l; ++$i) { $key = $array[$i]; $value = $array[$key]; $isLastItem = ($i == ($l - 1)); // do stuff } // or this way... $i = 0; $l = count($array); foreach ($array as $key =>$value) ( ​​​​$isLastItem = ($i == ($l - 1)); // 작업 수행 ++$i; )

또 다른 방법은 루프의 이전 결과를 기억하고 이를 최종 결과로 사용하는 것입니다.

$결과 = $where = "";

foreach ($conditions as $col => $val) ( $result = $where .= $this->getAdapter()->quoteInto($col." = ?", $val); $where .= " AND " ; ) $this->delete($result)를 반환합니다.

    그리고
  • 나는 개인적으로 HTML 요소를 사용하기 쉽게 해주는 이와 같은 디자인을 사용합니다.

    : 다른 속성의 동등성을 변경하면 됩니다...

    배열에는 거짓 요소가 포함될 수 없지만 다른 모든 요소는 거짓 부울 값으로 전달됩니다.

    $table = array("a" , "b", "c"); $it = 재설정($table); while($it !== false) ( echo "모든 루프";echo $it; $nextIt = next($table); if ($nextIt === false || $nextIt === $it) ( echo " 마지막 루프 또는 두 개의 동일한 항목"; ) $it = $nextIt; )

    최신 색인을 직접 얻을 수 있습니다.

    $numItems = 개수($arr);

    에코 $arr[$numItems-1];

    변수에 배열이 저장되어 있다고 가정하면 ...

    Foreach($array as $key=>$value) ( ​​​​echo $value; if($key != count($array)-1) ( echo ", "; ) )

    다음과 같은 것을 원하는 것 같습니다.

    $array = array("첫 번째", "두 번째", "세 번째", "마지막"); foreach($array as $key => $value) ( ​​​​if(end($array) === $value) ( ​​​​echo "마지막 인덱스!" . $value; ) )

    첫 번째 또는 마지막 요소를 제외한 모든 요소에 대해 작업을 수행해야 하고 배열에 두 개 이상의 요소가 있는 경우에만 다음 솔루션을 선호합니다.

    위에는 많은 솔루션이 있고 저보다 몇 개월/년 전에 게시된 솔루션이 있다는 것을 알고 있지만 이것이 매우 우아하다고 생각합니다. 각 루프를 확인하는 것은 오버헤드를 줄일 수 있는 숫자 확인 "i = (count-1)"과 달리 논리적 확인이기도 합니다.

    $첫 번째 = 사실; foreach($array as $key => $value) ( ​​​​if ($first) ( $first = false; // 전에 하고 싶은 일을 하세요 첫 번째 element echo "키, 값 쌍 목록:\n";

    ) else ( // 마지막 요소를 제외하고 // 모든 요소의 끝에서 원하는 작업을 수행합니다. 단, 목록에 두 개 이상의 요소가 있다고 가정합니다. echo "\n"; ) // 현재 요소에 대해 수행하려는 작업을 수행합니다. $key를 에코합니다. " => " . $값; ) 예를 들어 웹 개발 용어로 추가하려는 경우마지막 요소를 제외한 모든 요소에 대한 경계선 하단 순서가 지정되지 않은 목록(ul)에 대신 추가할 수 있습니다.첫 번째 요소를 제외한 모든 요소의 테두리 상단

    (IE7+ 및 Firefox/Webkit에서 지원되는 CSS:first-child는 이 논리를 지원하는 반면:last-child는 IE7에서 지원되지 않습니다.)

    각 중첩 루프에 대해 $first 변수를 자유롭게 재사용할 수 있으며 첫 번째 반복의 첫 번째 프로세스에서 각 루프가 $first false를 만들기 때문에 모든 것이 잘 작동합니다(그러므로 중단/예외로 인해 문제가 발생하지 않습니다).

    $첫 번째 = 사실; foreach($array as $key => $subArray) ( if ($first) ( $string = "키 목록 => 값 배열 쌍:\n"; $first = false; ) else ( echo "\n"; ) $string .= $key . "=>("; $first = true; foreach($subArray as $key => $value) ( ​​​​if ($first) ( $first = false; ) else ( $string .= ", "; ) $string .= $key . "=>" .= ")";

    예제 출력:

    키 => 값 배열 쌍 목록: key1=>(v1_key1=>v1_val1, v1_key2=>v1_val2) key2=>(v2_key1=>v2_val1, v2_key2=>v2_val2, v2_key3=>v2_val3) key3=>(v3_key1=>v3_val1 )

    한 가지 방법은 다음 반복자를 감지하는 것입니다. 반복자에 다음이 없으면 마지막 루프에 있다는 의미입니다.

    Foreach ($some_array as $element) ( if(!next($some_array)) ( // 이것이 마지막 $element입니다 ) )

    따라서 배열에 고유한 배열 값이 있으면 마지막 반복을 결정하는 것이 쉽습니다.

    Foreach($array as $element) ( if ($element === end($array)) echo "마지막 요소!"; )

    보시다시피, 마지막 요소가 배열에 한 번만 나타나면 이 방법이 작동합니다. 그렇지 않으면 잘못된 경보가 발생합니다. 여기서는 아닙니다. (물론 고유한) 키를 비교해야 합니다.

    Foreach($array as $key => $element) ( end($array); if ($key === key($array)) echo "LAST ELEMENT!"; )

    또한 이 경우 매우 중요한 엄격한 연락 연산자에 유의하십시오.

    $lastkey = 개수($array) - 1; foreach($array as $k=>$a)( if($k==$lastkey)( /*뭔가를 하세요*/ ) )

    다음과 같은 것을 원하는 것 같습니다.

    $numItems = 개수($arr); $i = 0; foreach($arr as $key=>$value) ( ​​​​if(++$i === $numItems) ( echo "마지막 인덱스!"; ) )

    즉, PHP에서 foreach를 사용하여 "배열"을 반복하고 싶지는 않을 것입니다.

    이미 많은 답변이 있지만 특히 표준 방식을 요청했기 때문에 반복자를 조사해 볼 가치가 있습니다.

    $arr = 범위(1, 3); $it = new CachingIterator(new ArrayIterator($arr)); foreach($it as $key => $value) ( ​​​​if (!$it->hasNext()) echo "Last:"; echo $value, "\n"; )

    다른 경우에도 더 유연하게 만드는 것을 찾을 수 있습니다.

    치명적인 오류: 비객체에서 멤버 함수를 호출하는 중...

    xyz가 객체가 아니므로 이 메서드를 호출할 수 없는 xyz->method()와 유사한 코드에서 발생합니다.

    이는 스크립트를 중지시키는 치명적인 오류입니다(향후 호환성 알림: PHP 7부터 잡기 버그가 될 것입니다).

    대부분의 경우 이는 코드에 오류 검사가 부족하다는 신호입니다. 해당 메서드를 호출하기 전에 객체가 실제로 객체인지 확인하세요.

    전형적인 예는 다음과 같습니다

    // ... PDO를 사용하는 일부 코드 $statement = $pdo->prepare("invalid query", ...); $statement->실행(...);

    위의 예에서는 요청을 준비할 수 없으며 prepare()가 $statement에 false를 할당합니다. Execute() 메서드를 호출하려고 시도하면 다음과 같은 결과가 발생합니다. 치명적인 오류 false는 값이 부울이기 때문에 "비객체"이기 때문입니다.

    알아내다 함수가 객체 대신 부울 값을 반환했습니다. 예를 들어 $pdo 객체에서 발생한 마지막 오류를 확인하세요. 이를 디버깅하는 방법에 대한 세부 사항은 특정 함수/객체/클래스에 대한 오류가 처리되는 방식에 따라 달라집니다.

    ->prepare가 실패하더라도 데이터베이스 핸들 $pdo는 현재 범위에 속하지 않습니다. 그가 결정한 곳을 찾으십시오. 그런 다음 이를 매개변수로 전달하거나 속성으로 저장하거나 전역 범위를 통해 공유합니다.

    또 다른 문제는 조건부로 개체를 생성한 다음 해당 조건부 블록 외부에서 메서드를 호출하려고 시도하는 것일 수 있습니다. 예를 들어

    If ($someCondition) ( $myObj = new MyObj(); ) // ... $myObj->someMethod();

    조건부 블록 외부에서 메서드를 실행하려고 하면 개체를 정의할 수 없습니다.

    관련 질문:

    • 객체가 아닌 멤버 함수 호출
    • 모든 PHP "치명적인 오류: 비객체에서 멤버 함수 호출..." 질문 목록