Я надеюсь, что понимаю ваш вопрос (если хотите, оставьте комментарий).
Если вы хотите иметь массив форм в качестве основных значений и только в том случае, если он пуст, принимает значение из второго массива, вы можете использовать комбинацию на array_filter
и array_merge
.
Рассмотрим следующий пример:
$form = array("km_user_first_name" => "Alice", "km_user_address" => "");
$row = array("km_user_first_name" => "Boby", "km_user_address" => "via pola");
$res = array_merge($row, array_filter($form));
Это выдаст:
Array
(
[km_user_first_name] => Alice
[km_user_address] => via pola
)
Я знаю, что я использую массив form
второй, как сказано в документации PHP [115 ] (спасибо @Nick):
Если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа будет перезаписывать предыдущее
blockquote>Надеюсь, что помогает!
Ваш regexp /{0}/gi
, так как Вы создаете его из строки. И это не допустимое выражение. Необходимо выйти {в regexp, потому что он имеет особое значение в regexp синтаксисе, таким образом, это должно быть:
new RegExp('\\{'+i+'\\}', 'gi');
, который является /\\{0\\}/gi
. Вам нужно к Escape выход \\
в строке.
Я думаю, что Ваша вторая строка, как предполагается,
reg = new RegExp('\{'+i+'\}', 'gi');
, но я не знаю, является ли это Вашей единственной проблемой или нет.
Я сильно поощрил бы Вас использовать функциональную форму String.replace () , чтобы решить Вашу проблему, вместо того, чтобы пытаться параметризовать regexp в для цикла, который выполняет итерации более чем {0}, {1}, и т.д.
, Другими словами, вместо того, чтобы искать '{0}' или '{1}', просто ищут '{([0-9] +)}' (т.е. {окружение} произвольного числа, и передайте функцию замене () функция для интеллектуальной замены этих выражений на основе числа между {}'s. Это позволяет Вам использовать литерал RegExp, который можно записать как / {([0-9] +)} / а не бездельничать с символами ESC в строках.
Что-то вроде этого:
s='the song says {0} little {1} little {2} little-endians';
args=['zero','one','two'];
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch)
{return args[(+firstmatch)]; }
);
, который уступает
the song says zero little one little two little-endians
, Посмотрите этот подобный вопрос .
редактирование: если Вы хотите оставить в покое объекты, которые больше, чем длина Вашего args
список, удостоверьтесь к проверке работоспособности число параметра:
s='the song says {0} little {1} little {2} little-endians,\n'+
' {3} little {4} little {5} little-endians';
args=['zero','one','two'];
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch)
{var i = +firstmatch; return i < args.length ? args[i] : wholematch;}
);
, который уступает
the song says zero little one little two little-endians,
{3} little {4} little {5} little-endians