根据存在的数组键的数量动态构建if语句

时间:2016-09-20 17:02:53

标签: php arrays if-statement

我有一个PHP函数,我传入一个字符串或列名数组。不幸的是,根据我得到的列名数量,这可能会有点麻烦和麻烦。

因此,有没有办法可以重写我的if语句,以便我可以根据数组中的元素数量动态构建条件?

我通常会检查一个值是否在数组中,但由于这些是另一个数组的键值,因此会使事情变得更复杂。以下是我目前的代码。

private function pushToArray($list, $columnName, $date) {
    $array = [];
    foreach($list as $item) {
        if (is_array($columnName)){
            if ($date == $item[$columnName[0]] || $date == $item[$columnName[1]]) {
                array_push($array, $item);
            }
        } else {
            if ($date == $item[$columnName]) {
                array_push($array, $item);
            }
        }
    }
    return $array;
}

从这里可以看出,随着我的数组元素的增加,我将不得不添加额外的if条件来处理更大的数组。我想避免的事情。

编辑: 现在,我正在使用laravel作为我的应用程序的框架。我正在尝试生成一个数组,该数组将填充即将发生的事件系统的视图。 以下是当前调用的示例:

$separatedArray = $this->pushToArray($this->separatedList(), 'destroyed_date', $currentDate);
$travelsArray = $this->pushToArray($this->travelsList(), ['leave_date','return_date'], $currentDate);
$trainingUsersArray = $this->pushToArray($this->trainingUsersList(), 'due_date', $currentDate);

以下是我将其移动到自己的函数之前的一些代码示例。

        $separatedArray = $travelsArray = $trainingUsersArray = [];
        $currentDate = $date->format('Y-m-d');

        foreach($separatedList as $user) {
            if ($currentDate == $user->destroyed_date) {
                array_push($separatedArray, $user);
            }
        }

        foreach($travels as $travel) {
            if ($currentDate == $travel->leave_date || $currentDate == $travel->return_date) {
                array_push($travelsArray, $travel);
            }
        }
        foreach($trainingUsers as $trainingUser) {
            if ($currentDate == $trainingUser->due_date) {
                array_push($trainingUsersArray, $trainingUser);
            }
        }

1 个答案:

答案 0 :(得分:1)

用foreach循环替换第一个if块的代码。

/**
 A delegate protocol for the `CreateViewController` class.
*/
protocol CreateViewControllerDelegate : class {
func createViewControllerDidSelectAdd(_ controller: CreateViewControllerDelegate)

}

class CreateViewController: UIViewController {

static let storyboardIdentifier = "CreateViewController"

weak var delegate: CreateViewControllerDelegate?

@IBAction func create(_ sender: AnyObject) {
    //present full screen for create list

    self.delegate?.createViewControllerDidSelectAdd(self as! CreateListViewControllerDelegate)

}

}