У меня есть форма с несколькими полями, по которой пользователь может искать. Как динамически записать условие if на основе полей, выбранных пользователем?
например. У меня есть 3 поля следующим образом:
$categoryId = $_REQUEST['category_id'];
$locationId = $_REQUEST['location_id'];
$statusId = $_REQUEST['status_id'];
Если пользователь выбрал category_id, location_id и status_id, то оператор my if должен выглядеть следующим образом:
if (!empty($categoryId) && !empty($locationId) && !empty($statusId)) {
if (isInTaxonomy($recordId, $categoryId) && isInTaxonomy($recordId, $locationId) && isInTaxonomy($recordId, $statusId) {
// Do something
}
}
если пользователь выбрал category_id и location_id, то my if statmeent будет выглядеть следующим образом:
if (!empty($categoryId) && !empty($locationId)) {
if (isInTaxonomy($recordId, $categoryId) && isInTaxonomy($recordId, $locationId) {
// Do something
}
}
если пользователь выбрал только category_id, тогда my if statmeent будет выглядеть следующим образом:
if (!empty($categoryId)) {
if (isInTaxonomy($recordId, $categoryId)) {
// Do something
}
}
Как вы видите, мне приходится реализовывать каждую возможную комбинацию полей, которую пользователь может выбрать для построения всех различных условий.
Я думал о том, чтобы сделать что-то вроде следующего, но это просто даст мне строку, и я не хочу использовать eval для ее выполнения:
$filter = [(!empty($categoryId) ? '(isInTaxonomy($recordId, $categoryId))' : ''),
(!empty($locationId) ? '(isInTaxonomy($recordId, $locationId))' : '')];
$condition = implode(' && ', array_filter($filter));
if (eval("return $condition;")) {
// Do something
}
Есть ли способ динамически генерировать все условия, используя более краткий код, не прибегая к Eval?