programing

어레이가 비어 있는 경우 Forech를 건너뛸 수 있는 가장 깨끗한 방법

goodcopy 2022. 12. 7. 00:16
반응형

어레이가 비어 있는 경우 Forech를 건너뛸 수 있는 가장 깨끗한 방법

큰 문제는 아니지만 좀 더 깔끔한 방법이 없을까 해서요.불필요한 if 문장으로 코드를 중첩하지 않는 것이 좋습니다.한다면$itemsis empty 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는 어레이가 비어 있는 경우 포어치를 건너뛸있는 가장 깨끗한 방법을 물어본 것에 유의하십시오(강조합니다).true, false, number 또는 string 값은 비어 있는 것으로 간주되지 않습니다.게다가 이것은, 실장하고 있는 오브젝트에서도 동작합니다.\Traversable,반면에.is_array안 먹혔어

가장 좋은 방법은 사용하기 전에 모든 블러디 변수를 초기화하는 것입니다.
그것은 이 바보 같은 "문제"를 해결할 뿐만 아니라 여러분의 진짜 두통을 많이 덜어줄 것입니다.

즉, $items는$items = array();네가 정말 원했던 거야

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

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

필요한 변수가 있는 경우boolean false- 예를 들어 데이터베이스에서 레코드가 반환되지 않거나array- 레코드가 반환되면 다음을 수행할 수 있습니다.

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

캐스트에 의한 어프로치((Array)$result)는 변수가 다음과 같은 경우 카운트1의 배열을 생성합니다.boolean false아마 당신이 원하는 건 아닐 거예요

경고 출력을 억제하는 것은 권장하지 않습니다.단, 이 기능을 사용하는 것이 좋습니다.is_array대신!empty.한다면$items0이 아닌 스칼라일 경우,foreach를 사용하면 에러가 발생합니다.!empty.

여기서 가장 좋은 방법은 $items가 항상 배열이 되도록 코드를 계획하는 것이라고 생각합니다.가장 쉬운 해결책은 $syslog=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) {

쓰기는 좀 귀찮지만 가장 안전한 방법입니다.

$items가 실제로 배열인지 여부 및 항목이 포함되어 있는지 여부를 확인할 수 있습니다.

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

코드 맨 위에 변수를 배열로 정의하는 것이 가장 좋습니다.

$oneItem으로 foreach((array)$myArr){ ..}

는 동작합니다만, 어레이를 루프 할 때마다 이 (어레이) 변환을 복제합니다.

코드의 한 단어도 복제하지 않는 것이 중요하므로 맨 위에 빈 배열로 정의하는 것이 좋습니다.

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

반응형