Programming

배열이 비어있는 경우 foreach를 건너 뛰는 가장 깨끗한 방법

procodes 2020. 7. 26. 13:29
반응형

배열이 비어있는 경우 foreach를 건너 뛰는 가장 깨끗한 방법


이 질문에는 이미 답변이 있습니다.

큰 문제는 아니지만 더 깔끔한 방법이 있는지 궁금합니다. 불필요한 if 문으로 코드를 중첩하지 않는 것이 좋습니다. 경우

$items

빈 PHP 오류가 발생합니다.

$items = array('a','b','c');

if(!empty($items)) { // <-Remove this if statement
  foreach($items as $item) {
    print $item;
  }
}

아마도 '@'오류 억제기를 사용할 수는 있지만 약간 해키 일 것입니다.


이를 수행하는 방법은 백만 가지가 있습니다.첫 번째는 배열이 있다고 가정하고 어쨌든 foreach를 통해 배열을 실행하는 것입니다.다른 경우에는 이것이 필요할 수 있습니다.

foreach ((array) $items as $item) {
    print $item;
}

참고 :

typecast에 대해 불평하는 모든 사람들에게 OP가

배열이 비어있는

경우 foreach를 건너 뛸 수있는 가장 깨끗한 방법을 요구했습니다 (강조는 내 것입니다). true, false, 숫자 또는 문자열 값은

비어있는 것으로 간주되지 않습니다

. 또한 이것은 구현하는 객체에서 작동

\Traversable

하지만

is_array

작동하지 않습니다.


가장 좋은 방법은

모든 혈액 변수

를 사용하기 전에 초기화 하는 것입니다.

 

그것은이 어리석은 "문제"를 해결할뿐만 아니라 많은

실제

두통을 줄여 줄 것 입니다.그래서, 같은 $ 항목을 도입하는 것은

$items = array();

당신이 무엇을

정말로

원했다.


$items = array('a','b','c');

if(is_array($items)) {
  foreach($items as $item) {
    print $item;
  }
}

경고 출력을 억제하지 않는 것이 좋습니다. 그러나

is_array

대신을 사용 하는 것이 좋습니다

!empty

. 경우

$items

제로가 아닌 스칼라을 될 일이, 다음은

foreach

당신이 사용하는 경우 여전히 오류가 발생하지

!empty

.


변수가 필요한 경우

boolean false

-예를 들어.

레코드가 데이터베이스에서 반환 될 때

또는

array

-

레코드가 반환 될 때

, 당신은 다음을 수행 할 수

foreach (($result ? $result : array()) as $item)
    echo $item;

cast (

(Array)$result

)를 사용하여 접근 하면 변수가

boolean false

원하는 것이 아닐 때 개수 1의 배열이 생성됩니다 .


여기에 가장 좋은 방법은 $ items가 항상 배열이되도록 코드를 계획하는 것입니다. 가장 쉬운 해결책은 $ items = array ()를 사용하여 코드 상단에서 초기화하는 것입니다. 이렇게하면 값을 할당하지 않아도 빈 배열을 나타냅니다.다른 모든 솔루션은 나에게 매우 더러운 해킹입니다.


foreach((array)$items as $item) {}

"표준 라이브러리"에 다음 기능이 있습니다.

/// Convert argument to an array.
function a($a = null) {
    if(is_null($a))
        return array();
    if(is_array($a))
        return $a;
    if(is_object($a))
        return (array) $a;
    return $_ = func_get_args();
}

기본적으로 이것은 배열 / 객체와 아무 관련이 없으며 다른 유형을 배열로 변환합니다. foreach 문 및 배열 함수와 함께 사용하면 매우 편리합니다.

  foreach(a($whatever) as $item)....

  $foo = array_map(a($array_or_string)....

  etc

삼항 논리는 오류없이 한 줄로 줄입니다. 이는 잘못 캐스트 된 변수 및 정의되지 않은 변수의 문제를 해결합니다.

foreach (is_array($Items) || is_object($Items) ? $Items : array()  as $Item) {

작성하는 것은 약간의 고통이지만 처리하는 가장 안전한 방법입니다.


모범 사례는 코드 맨 위에 변수를 배열로 정의하는 것입니다.foreach ((array) $ myArr as $ oneItem) {..}또한 작동하지만 배열을 반복해야 할 때 마다이 (배열) 변환을 복제합니다.코드의 단어조차 복제하지 않는 것이 중요하므로 맨 위에 빈 배열로 정의하는 것이 좋습니다.


You can check whether $items is actually an array and whether it contains any items:

if(is_array($items) && count($items) > 0)
{
    foreach($items as $item) { }
}

참고URL : https://stackoverflow.com/questions/3446538/cleanest-way-to-skip-a-foreach-if-array-is-empty

반응형