Другим решением может быть использование explode и array_map и использование preg_match проверки, не соответствует ли значение шаблону ключ = значение. Затем, если это не так, добавьте = ?
к значению.
шаблон
\w+\h*=\h*\S
Это будет соответствовать
\w+\h*
соответствует 1+ символам слова, за которыми следуют 0+ горизонтальных пробелов
=
Совпадение буквально
\h*\S
Соответствует 0+ горизонтальным пробелам, за которыми следует поиск не пропускового символа
Например
$var = "one, two , three = ?, four = 'val', five , six = 1, seven, eight = 'val' , nine";
echo implode(', ', array_map(function($x){
return preg_match('/\w+\h*=\h*\S/', $x) === 0 ? $x.' = ?' : $x;
}, array_map("trim", explode(',', $var))));
Результат
one = ?, two = ?, three = ?, four = 'val', five = ?, six = 1, seven = ?, eight = 'val', nine = ?
Php demo
Без использования регулярного выражения и само имя столбца не может содержать знак равенства, вы можете использовать strpos , чтобы проверить, содержит ли строка =
:
$var = "one, two , three = ?, four = 'val', five , six = 1, seven, eight = 'val' , nine";
echo implode(', ', array_map(function($x){
return strpos($x, '=') === false ? $x.' = ?' : $x;
}, array_map("trim", explode(',', $var))));
Php демо