例如,我有一个这样的数组:
array(4)(“a”=> string(0)“”“b”=> string(0)“”“c”=> string(0)“”“d”=> string(0)“”)
给定值都不应为空。
目前,我用这个:
if (!empty($_POST['x']['a']) && !empty($_POST['x']['b']) && !empty($_POST['x']['c']) && !empty($_POST['x']['d']))
......从可读性方面来说很糟糕。
注意:数组是关联的。
答案 0 :(得分:6)
count(array_filter($_POST['x'])) === 4
一些解释:Empty() is the Opposite of a Boolean Variable,array_filter
删除所有等于false的元素(即!empty()
),此计数必须与4个元素的期望相匹配。
如果元素的数量由提交的元素总数(空或不是)定义,请使用count()代替幻数:
if (count(array_filter($_POST['x'])) === count($_POST['x']))
{
echo 'No empty elements in $_POST["x"]!';
}
答案 1 :(得分:0)
编辑:(回应评论)
你可以将“uncool”逻辑封装在一个函数中并用一行代码调用它:
if ( check_for_empty_values( $_POST ) ) { // Do something }
封装的检查逻辑:
function check_for_empty_values( $data ) {
$valid = true;
foreach ( $data as $element ) {
if ( is_array( $element) ) {
foreach ( $element as $subelement ) {
if ( empty( $subelement ) ) {
$valid = false;
}
}
}
}
return $valid;
}
答案 2 :(得分:0)
您检查了array_reduce函数吗?
function all_empty($v,$w){
$v .= $w;
return $v;
}
if(array_reduce($_POST['x'],'all_empty','')==''){
我没有测试过,但你可以尝试一下
答案 3 :(得分:-2)
for($_POST as $key => $value) {
if( !empty($value) ) {
// Do stuff.
}
}