У меня есть таблица с целым рядом полей и записей в ней (40 + полей).
Я использую свой результат MySQL следующим образом:
<?php $field1 = $row['field1']; $field2 = $row['field2']; $field3 = $row['field3']; ?>
Как вы видите, имя переменной совпадает с именем поля.
Как я могу сделать это для всех полей, не набирая их? Было бы действительно здорово, когда я добавлю больше полей!
Я знаю об функции eval
, однако я не уверен, как ее использовать в этом случае.
Кроме того, как я могу сгенерировать массив с результатами? Вот так:
<?php $arr = array( 'field1'=>$row['field1'] ); ?>
Вы можете использовать extract () :
extract($row);
Однако , проявляйте большую осторожность, чтобы вы не загрязняли пространство имен этой функцией. Скажем, у вас уже есть переменная с именем $car
, и у вас есть поле в вашей базе данных под названием car
. Вы можете нечаянно переписать существующие переменные!
Тогда может быть безопаснее использовать:
extract($row, EXTR_SKIP); // don't extract variables that already exist in the namespace
EDIT: в отношении вашего редактирования вам не нужно создавать массив для результатов … ваш массив строк $ result является результатом. Если вы построите массив, как в вашем edit, $arr['field1'] = $row['field1']
, то почему бы вам вообще не обойти конструкцию этого массива и просто использовать исходную $row
?
Функция extract()
выполняет именно это:
extract($row);
По умолчанию он переопределит любую существующую переменную (например, если у вас уже есть переменная field1
, она переопределит ее). Вы можете отключить это, передав EXTR_SKIP в качестве второго параметра:
extract($row, EXTR_SKIP);
Или вы можете префикс всех переменных:
extract($riw, EXTR_PREFIX_ALL, 'row');
Кроме того, как я могу сгенерировать массив с результатами?
$arr = $row;