어레이가 비어 있는 경우 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
'programing' 카테고리의 다른 글
| MySQL을 다시 시작하지 않고 MySQL의 느린 쿼리 로그를 활성화하려면 어떻게 해야 합니까? (0) | 2022.12.07 |
|---|---|
| PIP 및 설정이 포함된 Python Cryptography 패키지를 설치하지 못했습니다.화이 (0) | 2022.12.07 |
| CodeIgniter 인증 라이브러리를 선택하려면 어떻게 해야 합니까? (0) | 2022.12.07 |
| 클래스에 동적으로 속성을 추가하려면 어떻게 해야 합니까? (0) | 2022.12.07 |
| 서블릿 필터를 사용하여 요청 매개 변수 수정 (0) | 2022.12.07 |