[php] PHP를 사용하여 배열이 비어 있는지 확인하는 방법?

players비어 있거나 쉼표로 구분 된 목록 (또는 단일 값)입니다. 비어 있는지 확인하는 가장 쉬운 방법은 무엇입니까? $gameresult배열을 페치하자마자 그렇게 할 수 있다고 가정합니다 $gamerow. 이 경우 아마도 $playerlist비어 있는 경우 분해를 건너 뛰는 것이 더 효율적 이지만 인수를 위해 배열이 비어 있는지 어떻게 확인합니까?

$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);



답변

배열에 모든 요소가 있는지 확인 해야하는 경우

if (empty($playerlist)) {
     // list is empty.
}

점검하기 전에 빈 값을 정리해야하는 경우 (일반적으로 explode이상한 문자열 을 방지하기 위해 수행됨 ) :

foreach ($playerlist as $key => $value) {
    if (empty($value)) {
       unset($playerlist[$key]);
    }
}
if (empty($playerlist)) {
   //empty array
}


답변

빈 배열은 PHP에서 거짓이므로 empty()다른 사람들이 제안한대로 사용할 필요조차 없습니다 .

<?php
$playerList = array();
if (!$playerList) {
    echo "No players";
} else {
    echo "Explode stuff...";
}
// Output is: No players

PHP의은 empty()변수가 존재하거나 (falsey 같은 값이되지 않는 경우를 판정한다 array(), 0, null, false, 등).

대부분의 경우 확인을 원합니다 !$emptyVar. 사용 empty($emptyVar)변수가 설정되지 않았을 수도 있습니다 그리고 당신은을 트리거 늘 그렇게하지 않으면 E_NOTICE; IMO 이것은 일반적으로 나쁜 생각입니다.


답변

괜찮은 답변이지만 PHP가 배열이 비어 있는지 결정할 때 더 명확하게 설명하기 위해 조금 확장 할 것이라고 생각했습니다.


주요 참고 사항 :

키를 가진 배열 은 PHP에 의해 비어 있지 않은 것으로 결정됩니다 .

배열 값에는 키가 필요하므로 배열에 값이 있는지 여부는 키가없는 경우에만 값이 비어 있는지 여부를 결정하지 않습니다 (따라서 값이 없음).

따라서 배열을 검사 empty()한다고해서 값이 있는지 아닌지를 알려주지 않고 배열이 비어 있는지, 키가 배열의 일부인지 알려줍니다.


따라서 사용할 검사 방법을 결정하기 전에 어떻게 배열을 생산하고 있는지 고려하십시오.
EG 각 양식 필드에 배열 이름 (예 :)이있을 때 사용자가 HTML 양식을 제출하면 배열에 키 있습니다 name="array[]". 비어 있지 않은 자동차는 각 양식 필드의 배열 키 값을 증가가있을 것 같은 배열은 각 필드에 대해 생산 될 것이다.

예를 들어 다음 배열을 사용하십시오.

/* Assigning some arrays */

// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");

// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";

// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';

위의 배열에 대한 배열 키와 값을 반향하면 다음과 같은 결과가 나타납니다.

배열 하나 :
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]

배열 2 :
[0] => [UserValue01]
[1] => [UserValue02]

배열 3 :
[0] => []
[1] => []

위의 배열을 테스트하면 empty()다음 결과 가 반환됩니다.

배열 하나 :
$ ArrayOne이 비어 있지 않습니다

배열 2 :
$ ArrayTwo가 비어 있지 않습니다

배열 3 :
$ ArrayThree가 비어 있지 않습니다

배열을 할당 할 때 배열은 항상 비어 있지만 이후와 같이 사용하지 마십시오.

$ArrayFour = array();

이것은 비어 있습니다. 즉 empty(), 위의 if 를 사용할 때 PHP는 TRUE를 반환합니다 .

따라서 배열에 키가있는 경우 (예 : 양식의 입력 이름 또는 수동으로 지정하는 경우 (예 : 데이터베이스 열 이름을 키로 사용하지만 데이터베이스의 값 / 데이터는없는 배열을 생성)) 배열은 없습니다 empty().

이 경우 foreach에서 배열을 반복하여 각 키에 값이 있는지 테스트 할 수 있습니다. 어쨌든 키를 확인하거나 데이터를 삭제하는 등 배열을 통해 실행해야하는 경우이 방법이 좋습니다.

그러나 “값이 존재하는 경우”를 알아야 TRUE 또는 FALSE를 반환하는 것이 가장 좋은 방법은 아닙니다 . 배열에 키가 있다는 것을 알 때 배열에 값이 있는지 확인하는 다양한 방법이 있습니다. 함수 나 클래스가 최선의 접근 방법 일 수 있지만 항상 그렇듯이 항상 환경과 정확한 요구 사항은 물론 현재 배열에서 수행하는 작업 (있는 경우)과 같은 다른 작업에 따라 달라집니다.


다음은 매우 작은 코드를 사용하여 배열에 값이 있는지 확인하는 방법입니다.

사용 array_filter():
배열의 각 값을 반복하여 콜백 함수에 전달합니다. 콜백 함수가 true를 반환하면 배열의 현재 값이 결과 배열로 반환됩니다. 배열 키가 유지됩니다.

$EmptyTestArray = array_filter($ArrayOne);

if (!empty($EmptyTestArray))
  {
    // do some tests on the values in $ArrayOne
  }
else
  {
    // Likely not to need an else, 
    // but could return message to user "you entered nothing" etc etc
  }

array_filter()이 답변의 첫 번째 코드 블록에서 작성된 세 가지 예제 배열에서 모두 실행 하면 다음과 같은 결과가 발생합니다.

배열 하나 :
$ arrayone이 비어 있지 않습니다

배열 2 개 :
$ arraytwo가 비어 있지 않습니다

배열 3 :
$ arraythree가 비어 있습니다

따라서 키가 있는지 여부에 관계없이 값이 없으면 array_filter()새 배열을 만든 다음 새 배열이 비어 있는지 확인하여 원래 배열에 값이 있는지 표시합니다.
이상적이고 약간 지저분하지는 않지만 거대한 배열이 있고 다른 이유로 루프를 반복 할 필요가 없다면 필요한 코드 측면에서 가장 간단합니다.


오버 헤드를 확인 한 경험이 없지만 값을 찾은 경우 사용 array_filter()foreach확인 의 차이점을 아는 것이 좋습니다 .

분명히 벤치 마크는 다양한 매개 변수, 크고 작은 배열 및 값이 있고 그렇지 않은 경우에 있어야합니다.


답변


답변

테스트중인 변수가 실제로 명시 적으로 빈 배열인지 확인하려면 다음과 같이 사용할 수 있습니다.

if ($variableToTest === array()) {
    echo 'this is explicitly an empty array!';
}


답변

0 => ''사용 empty()이 실패 하는 거짓 또는 빈 행 (예 :)을 제외하려면 다음을 시도해보십시오.

if (array_filter($playerlist) == []) {
  // Array is empty!
}

array_filter(): 콜백이 제공되지 않으면 FALSE와 같은 배열의 모든 항목이 제거됩니다 (부울로 변환 참조).

NULL, FALSE 및 빈 문자열 ( '')을 모두 제거하고 0 값 ( 0)을 남기 려면 strlen콜백으로 사용할 수 있습니다 . 예를 들면 다음과 같습니다.

$is_empty = array_filter($playerlist, 'strlen') == [];


답변

아무도이 대답을하지 않은 이유는 무엇입니까?

$array = [];

if($array == []) {
    // array is empty
}