Ответ 1
<?php extract($array); ?>
Предположим, что у меня есть массив, например:
$foo = array('first' => '1st',
'second' => '2nd',
'third' => '3rd');
Как я могу выбрать ключи из массива и сделать их собственными переменными?
Например, массив $foo
станет следующим:
$first = '1st';
$second = '2nd';
$third = '3rd';
Я спрашиваю об этом, потому что я создаю структуру MVC, чтобы помочь с моим ООП, и я хотел бы, чтобы пользователь передал переменную функции просмотра загрузки, которая позволит пользователю использовать переменные в шаблоне без необходимости знать какой массив был вызван.
Например:
$array = array('title' => 'My blog!' [...]);
$this->load->view('view.php', $array);
view.php:
echo $title;
Вывод:
Мой блог!
<?php extract($array); ?>
Вы можете сделать это:
foreach($foo as $k => $v) {
$$k = $v;
}
Простым методом является использование переменных переменных:
foreach($foo as $key => $value) {
$$key = $value;
}
echo $first; // '1st'
Обратите внимание, что это, как правило, обескураживает. Было бы лучше изменить вашу систему шаблонов, чтобы переменные могли быть охвачены внутри шаблона. В противном случае у вас могут возникнуть проблемы с коллизиями, и вы должны проверить их существование и т.д.
Это действительно ответ на мой собственный вопрос, но, поскольку он был помечен как дубликат, мне посоветовали опубликовать мой ответ здесь. (У меня нет привилегии публиковать в мета.)
Если у вас есть таблица в базе данных с множеством столбцов, может быть непросто создать переменную для каждого из них. Самое замечательное, что вы можете создавать переменные автоматически!
Этот метод использует заголовок/заголовок/имя столбцов в таблице базы данных в качестве имен переменных, а содержимое выбранной строки в качестве значения переменных.
Этот подход подходит, когда вы выбираете только одну строку из таблицы. Мой код с комментариями:
$query = "SELECT * FROM mdlm WHERE mdlmnr = $id"; // Select only *one* row, the column mdlmnr is a unique key
$resultat = $conn->query($query); //Get the result (the connection is established earlier)
while ($col = $resultat->fetch_field()) { //fetch information about the columns
$kolonnetittel = $col->name; //Set the variable as the name of the column
echo $kolonnetittel . "<br>"; //Show all the column names/variables
}
$innhold = $resultat->fetch_assoc(); // get the content of the selected row as an array (not a multidimensional array!)
extract($innhold, EXTR_PREFIX_SAME, "wddx"); // Extract the array
Так как я не профессионал, код может быть не лучшим, но он работает для меня :-) Когда список переменных появился на моей веб-странице, я скопировал его в Excel и использовал concatenate для создания php/html/css-code: абзацы с обозначенным классом для каждой переменной. Затем я скопировал этот код обратно в код моей веб-страницы и переместил каждую часть. Прежде чем закончить, я закомментировал эту строку:
//echo $kolonnetittel . "<br>";
Полезные ссылки:
Я надеюсь, что этот "учебник" может помочь кому-то еще!
В PHP 7.1 вы можете использовать list() и его сокращение для создания новой переменной из ключей массива.
$foo = array('first' => '1st',
'second' => '2nd',
'third' => '3rd');
list('first' => $first, 'second' => $second, 'third' => $third) = $foo;
// $first = '1st'
// or use shorthand
['first' => $first, 'second' => $second, 'third' => $third] = $foo;
Это дает вам больше контроля над извлечением переменных из массива. Например, вы можете вытащить только "первое" и "второе" и пропустить другие.