1

我有一个数据数组,其中包含一个开始日期字段、一个结束日期字段和一个持续时间字段。在验证期间,我需要检查是否设置了至少两个,因为您可以从您拥有的两个中推断出第三个。目前我的 if 子句如下:

if ((!isset($data['start']) && !isset($data['duration'])) 
    || (!isset($data['start']) && !isset($data['end']))
    || (!isset($data['end']) && !isset($data['duration']))

它工作正常,但我的问题是是否有更优雅的方式来解决这个问题?

我深奥的部分也对是否存在一个给定 n 个字段和 x 所需的最小值的函数会提供有效/无效状态感兴趣?此外,给定的 n 个字段和这些字段之间的一组关系是否可以确定依赖关系是否已得到满足?

该数组包含许多与其他表单字段相关的其他元素,因此不幸的是,仅仅计算元素的数量并不是一个有效的解决方案。

4

1 回答 1

2

这个怎么样:

$ctr = 0;

$ctr += (isset($data['start'])) ? 1 : 0;
$ctr += (isset($data['end'])) ? 1 : 0;
$ctr += (isset($data['duration'])) ? 1 : 0;

if ($ctr >= 2)
{
    // do stuff
}

根据您的要求提供一个功能,但您需要为其播种:

$fields = array('start', 'end', 'duration');
$minimum = 2;

function check_fields($data, $fields, $minimum)
{
    $ctr = 0;

    foreach ($fields as $field)
    {
        $ctr += (isset($data[$field])) ? 1 : 0;
    }

    return ($ctr >= $minimum) ? true : false;
}

if (check_fields())
{
    // do stuff
}
于 2013-11-05T16:36:12.280 回答