배열이 비어있는 경우 foreach를 건너 뛰는 가장 깨끗한 방법
- foreach ()에 대한 잘못된 인수 19 답변
큰 문제는 아니지만 더 깔끔한 방법이 있는지 궁금합니다. 불필요한 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
'Programming' 카테고리의 다른 글
페이지에 대한 Facebook 액세스 토큰 (0) | 2020.07.26 |
---|---|
String.Format과 문자열 연결을 사용하는 것이 더 좋은 경우는 언제입니까? (0) | 2020.07.26 |
벡터에서 여러 값을 삭제하는 방법은 무엇입니까? (0) | 2020.07.26 |
하스켈 타입 vs 데이터 생성자 (0) | 2020.07.26 |
루비로 추상 클래스를 구현하는 방법은 무엇입니까? (0) | 2020.07.26 |