如何确定是否在存在依赖项的数组中设置变量


How to determine if variables are set in an array where dependencies exist

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

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

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

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

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

这个怎么样:

$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
}