У меня есть функция, которая принимает массив аргументов «Опции» для установки флагов для запросов к базе данных. Это выглядит так
function c_SQL($SQL='', $FIELDS=array(), $OPTIONS=array('SINGLEROW'=>false,'foo'=>false,'bar'=>false)) {
}
Я пытаюсь сохранить ключи массива по умолчанию, если я не установил их в своем вызове функции:
$test = c_SQL($query,$fields,array('SINGLEROW'=>true));
Это генерирует ошибку внутри функции c_SQL, когда мы проверяем ключи массива, не указанные (foo и bar).
Есть ли способ сохранить ‘foo’ и ‘bar’, если они не указаны, и изменять ключи только в том случае, если они переданы в функцию?
Вы можете держать значения по умолчанию как константу, и использовать array_merge
чтобы применить их к вводу пользователя:
$DEFAULT_OPTIONS = array('SINGLEROW'=>false,'foo'=>false,'bar'=>false);
function c_SQL($sql='', $fields=array(), $options=array()) {
$actual_options = array_merge($default_options, $options);
}
Ты можешь использовать array_merge
внутри функции для слияния с массивом значений по умолчанию, определенным внутри функции.
function c_SQL($SQL = '', $FIELDS=array(), $OPTIONS = array()) {
$defaults = array(
'SINGLEROW' => false,
'foo' => false,
'bar' => false
);
$OPTIONS = array_merge($defaults, $OPTIONS);
return $OPTIONS;
}
# array ( 'SINGLEROW' => false, 'foo' => false, 'bar' => false, )
var_export(c_SQL());
# array ( 'SINGLEROW' => true, 'foo' => false, 'bar' => false, )
var_export(c_SQL(array('SINGLEROW' => true)));
Создайте параметры по умолчанию внутри тела функции, а затем объедините новые параметры с array_merge
function c_SQL($SQL='', $FIELDS=array(), $OPTIONS=array()) {
$DEFAULTS = array('SINGLEROW'=>false,'foo'=>false,'bar'=>false);
$OPTIONS = array_merge($DEFAULTS, $OPTIONS);
}
Попробуйте назначить $OPTIONS
как null
или пустой массив, а затем проверьте в функции проверку, является ли он нулевым или нет, если его нуль, тогда назначьте массив. Посмотрите на это здесь ..
function c_SQL($SQL='', $FIELDS=array(), $OPTIONS=NULL) {
if(empty($OPTIONS) {
$OPTIONS=array('SINGLEROW'=>false,'foo'=>false,'bar'=>false)
} else {
$othervalues = array('SINGLEROW'=>false,'foo'=>false,'bar'=>false);
$OPTIONS = array_merge($othervalues, $OPTIONS);
//do something here
}
}