Создать новые переменные из ключей массива в PHP - PullRequest
46 голосов
/ 07 февраля 2011

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

$foo = array('first' =>  '1st',
             'second' => '2nd',
             'third' =>  '3rd');

Как я могу выбрать ключи из массива и сделать их своими переменными? Например, массив $foo станет:

$first = '1st';
$second = '2nd';
$third = '3rd';

Я спрашиваю об этом, потому что я создаю инфраструктуру MVC, чтобы помочь с моим ООП, и я хотел бы, чтобы пользователь передал переменную в функцию загрузки View, которая позволит пользователю использовать переменные в шаблоне без необходимости как назывался массив.

Например:

$array = array('title' =>  'My blog!' [...]);
$this->load->view('view.php', $array);

view.php:

echo $title;

Выход:

Мой блог!

Ответы [ 5 ]

122 голосов
/ 07 февраля 2011
24 голосов
/ 07 февраля 2011

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

foreach($foo as $k => $v) {
  $$k = $v;
}
6 голосов
/ 07 февраля 2011

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

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

echo $first; // '1st'

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

1 голос
/ 23 марта 2018

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

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

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

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

$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-код: абзацы с обозначенным классом для каждой переменной. Затем я скопировал этот код обратно в код моей веб-страницы и переместил каждую часть. Перед завершением я закомментировал эту строку:

//echo $kolonnetittel . "<br>"; 

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

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

0 голосов
/ 04 мая 2019

В PHP 7.1 вы можете использовать список () и его сокращение для создания новой переменной из ключей массива.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...