web-dev-qa-db-ja.com

PHPの配列キーから新しい変数を作成する

次のような配列があるとします:

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

配列からキーを選択して独自の変数にするにはどうすればよいですか?たとえば、配列$fooは次のようになります。

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

これは、OOPを支援するMVCフレームワークを作成しているため、ユーザーに変数をViewロード関数に渡してもらい、配列を知らなくてもテンプレート内の変数を使用できるようにするためです。と呼ばれていました。

例えば:

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

view.php:

echo $title;

出力:

私のブログ!

46
Derek Maciel
122
KomarSerjio

これを行うことができます:

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

簡単な方法は、変数変数を使用することです:

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

echo $first; // '1st'

ただし、これは一般的に推奨されないことに注意してください。テンプレート内で変数をスコープできるようにテンプレートシステムを変更することをお勧めします。そうしないと、衝突の問題が発生し、衝突の存在などをテストする必要があります。

6
Hamish

これは、実際には 私の質問 に対する回答ですが、重複としてマークされているため、 アドバイスされました ここに回答を投稿します。 (メタで投稿する権限がありません。)

多くの列を持つデータベースにテーブルがある場合、各テーブルに変数を作成するのは面倒です。すばらしいことは、変数を自動的に作成できることです!

このメソッドは、変数名としてデータベーステーブルの列の見出し/タイトル/名前を使用し、変数の値として選択された行のコンテンツを使用します。

このアプローチは、テーブルからone行のみを選択する場合に適しています。コメント付きの私のコード:

$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

私はプロではないので、コードは最良ではないかもしれませんが、それは私のために機能します:-)変数のリストが私のWebページに表示されたら、Excelにコピーし、連結を使用してphp/html/css-codeを作成しました:各変数に指定されたクラスを持つ段落。次に、このコードをWebページのコードにコピーし、すべての部分を移動しました。終了する前に、この行をコメントアウトしました。

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

便利なリンク:

この「チュートリアル」が他の誰かに役立つことを願っています!

1
Ingeborg

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;

これにより、配列から変数を引き出す際の制御が強化されます。たとえば、「最初」と「2番目」だけを引き出して、他をスキップできます。

0
Supun Kavinda