Я думаю, что ваш подход немного чрезмерно сложен, но ваша проблема не в конкатенации индекса массива: в вашем коде нет синтаксических ошибок в том виде, как вы его представили.
Например, это работает как брелок:
$a = array("foo"=>1);
$o = "o";
print $a["fo$o"]; // prints 1
Ваша проблема в том, что значение $guest_identifier
не установлено должным образом, поэтому вы ищете индексы POST, которых просто нет.
Есть несколько способов обойти это. Моим первым предложением было бы просто проверить, есть ли идентификатор для начала, прежде чем вызывать эту функцию. Если это не вариант, я бы, вероятно, создал помощника:
function ifInPost($val, $default = NULL){
if( isset( $_POST[ $val ] ) ) return $_POST[ $val ];
return $default;
}
Тогда вы можете просто заменить $_POST["fname_$guest_identifier"]
на ifInPost("fname_$guest_identifier")