2010-01-25 2 views
1

var가 비어 있는지 어떻게 테스트 할 수 있습니까? 내가 루프를 사용하지 않고PHP에서 하나 이상의 var가 공백인지 테스트하는 방법은 무엇입니까?

array($myname,$myhouse,$mywife); 

가 어떻게 을 빈이 경우 그들 각각을 확인할 수 없거나이 배열이?

+1

당신이 의도를 알지 못하기 때문에 모든 사람들의 답이 내려지기 전에 루프를 사용하고 싶지 않다는 의문을 제기하십시오. –

+3

궁금합니다. 왜 루프가 없습니까? 변수의 내용은 무엇입니까? 문자열? 배열이 다시 나타 납니까? –

+0

@ Robert Greiner 이제 모든 사람이 투표 할 수 있습니다. – streetparade

답변

8

당신이 원하는 것은 불가능하거나 우스꽝스러운 것입니다. 각 변수를 이름으로 명시 적으로 테스트하거나 루프를 사용하여 동적 변수 콜렉션을 테스트해야합니다. (물론 기능 제외)

+1

몇 가지 방법이 있습니다 ... 왜이 대답은 이미 5 upvotes있다 궁금해. –

+1

이제 받아 들일 수 있습니까? 기묘한. 이미 영리한 대답이 있습니다. –

+3

심지어 영리한 답변에는 루프가 있지만 개발자에게는 숨겨져 있습니다. 아마도 이것은 숙제/숙제 문제였습니까? – FrustratedWithFormsDesigner

3
$myvars = array($myname, $myhouse, $mywife); 
foreach ($myvars as $value) { 
    if (empty($value)) { 
    // value is empty 
    } 
} 

편집을 : 여기에하지 않는 버전이 루프를 사용하십시오 :

$myvars = array($myname, $myhouse, $mywife); 
$myvars_filtered = array_filter($myvars, "empty"); // or isset, if you prefer 
if (count($myvars_filtered) > 0) { 
    // one or more values were empty 
} 

"empty" 대신 "isset"을 사용하면 Felix가 주석을 달았으므로 값이 아닌 값을 갖는 모든 값을 가져옵니다. 따라서이 경우 $myvars에있는 요소의 수와 $myvars_filtered에있는 요소의 수를 비교해야합니다.

+0

멍청이가없는 Noop – streetparade

+1

@streetparade : 각각 별도로 확인 하시겠습니까? {...}' – FrustratedWithFormsDesigner

+0

하지만 긴 버전도 있습니다. – streetparade

7

한 행은 하나 개의 변수는 달리 1 비어 있으면

function not_empty($val) { 
    return !empty($val); 
} 

$result = array_product(array_map('not_empty',$array)); 

결과 0이다.
물론 어느 것이 비어 있는지는 알 수 없습니다. ;)

array_map, array_product을 참조하십시오.

+1

이것은 영리합니다. ... 물론, 매핑 함수를 사용한다는 것은 뒤에서 진행되는 반복이 여전히 있음을 의미합니다. – FrustratedWithFormsDesigner

+1

물론 루핑 (어느 시점에서) 피할 수 없습니다 ... –

+0

이것은 정말 영리합니다! 좋은 것. –

5

당신이 루프를 작성하지 않고 의미하는 경우에 당신은 사용할 수 있습니다

in_array(true, array_map(create_function('$x', 'return empty($x);'),$array)); 

를 암시는 것입니다 물론 루프의 배열을 통해, 두 번 사실! 일단 공허를 확인하고 다시 결과를 확인하십시오. non_empty 값을 쳤을 때 휴식을 취할 수있는 루프가 더 좋습니다.

+0

오, 그것도 좋습니다! 그래도 암시 적 루프가 많이 있습니다. – FrustratedWithFormsDesigner

1

루프 사용 나던 또 다른 해결책 :

<?php 
$my_house = ""; 
$my_name = "Foo Bar"; 
$my_wife = "Angelina"; 

$arr = array($my_house, $my_name, $my_wife); 
preg_replace("/.+/","-",$arr,-1,$count); 
if ($count == 3) { 
    # everything is filled 
} else { 
    # missing somehwere 
} 
?> 
1

은 물론 그것을 할 수있는 방법이있다합니다.그 중 하나 :

<?php 
$array = array('myname' => 'Jakob', 'myhouse' => '', 'mywife' => 1); 

$empty_elements = array(""); 
$array = array_keys(array_intersect($array,$empty_elements)); 

var_dump($array); 
?> 

출력 :

배열 0 => 문자열 'myhouse'(빈 것들을 제거)

비슷한 문제에 대한 몇 가지 다른 가능성을 : 아마 가장 http://hasin.wordpress.com/2009/09/16/removing-empty-elements-from-an-array-the-php-way/

+0

링크에서 PHP 루프를 원하지 않는 이유를 알 수 있습니다. 내부 루프를 사용하는 것보다 속도가 느립니다. –

관련 문제