Подтвердить что ты не робот

Создание новых переменных из ключей массива в PHP

Предположим, что у меня есть массив, например:

$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;

Вывод:

Мой блог!

4b9b3361

Ответ 2

Вы можете сделать это:

foreach($foo as $k => $v) {
  $$k = $v;
}

Ответ 3

Простым методом является использование переменных переменных:

foreach($foo as $key => $value) {
   $$key = $value;
}

echo $first; // '1st'

Обратите внимание, что это, как правило, обескураживает. Было бы лучше изменить вашу систему шаблонов, чтобы переменные могли быть охвачены внутри шаблона. В противном случае у вас могут возникнуть проблемы с коллизиями, и вы должны проверить их существование и т.д.

Ответ 4

Это действительно ответ на мой собственный вопрос, но, поскольку он был помечен как дубликат, мне посоветовали опубликовать мой ответ здесь. (У меня нет привилегии публиковать в мета.)

Если у вас есть таблица в базе данных с множеством столбцов, может быть непросто создать переменную для каждого из них. Самое замечательное, что вы можете создавать переменные автоматически!

Этот метод использует заголовок/заголовок/имя столбцов в таблице базы данных в качестве имен переменных, а содержимое выбранной строки в качестве значения переменных.

Этот подход подходит, когда вы выбираете только одну строку из таблицы. Мой код с комментариями:

$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>"; 

Полезные ссылки:

Я надеюсь, что этот "учебник" может помочь кому-то еще!

Ответ 5

В 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;

Это дает вам больше контроля над извлечением переменных из массива. Например, вы можете вытащить только "первое" и "второе" и пропустить другие.