РЕДАКТИРОВАТЬ: РЕШЕН
ОРИГИНАЛЬНАЯ ПОЧТА:
У меня есть цикл foreach, который создает переменные в виде:
foreach ($fieldsarray as $field) { ${$field} = $globalrow[$field]; }
Это создает переменные, используя элементы массива, такие как $ firstname, $ lastname и т. Д.
Теперь, поскольку значения этих переменных извлекаются из БД, я не могу снова использовать имена переменных в одном и том же foreach. Я хотел бы использовать это в цикле:
if(!empty($$field)) { $r.$field='<tr><td width="50%">'.${$field}._label.': </td> <td width="50%">'.${$field}.'</td></tr>'; }
В принципе, это создало бы строки таблицы с данными из БД, но только если значение переменной не пусто.
Моя проблема заключается в следующем: поскольку я заявил выше, например, $ firstname = 'John' – тогда вторая часть кода больше не работает, потому что я предполагаю, что PHP не преобразует приведенный выше фрагмент в
if(!empty($firstname))
а скорее
if(!empty(John))
Как я могу «заставить» PHP снова использовать переменную NAME, а не ее значение в этом случае?
Спасибо за помощь.
EDIT: Хорошо, приветствовали предложения cheezeburgers, и я думаю, что теперь он работает по назначению. Спасибо всем вам за вашу помощь.
EDIT 2: Строки таблицы выводятся правильно на экране, например:
First Name: John Last Name : Smith
но по какой-то странной причине в подтверждении по электронной почте результат удваивается:
First Name: John Last Name : Smith First Name: John Last Name : Smith
В обоих случаях я просто повторяю их:
<?php echo $allrows ?>
где $ allrows находится в цикле foreach.
(Я отправлю эту часть в качестве нового вопроса, так как теперь это новая проблема)
PHP отлично справится с этим, просто вы пропустили цитату вокруг _label
и, вероятно, это читается как константа.
Попробуй это:
$$field='<tr><td width="50%">'.${$field}.'_label: </td> <td width="50%">'.${$field}.'</td></tr>';
который дает результат как:
John_label: John
демонстрация
Я бы сделал это совсем иначе, но чтобы ответить на ваш вопрос, попробуйте следующее:
extract($globalrow);
Он создает переменные в текущей области для каждой записи в массиве, идущей по имени соответствующего ключа. Таким образом, пока нет числовых клавиш, это должно работать вместо ${$field} = $globalrow[$field];
, Затем просто ссылайтесь на переменные по фактическому имени.