我有一个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);
}
}
答案 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)
}
}