[英]How to convert array of arrays to associated array in PHP
我的數據庫中有一個表用於存儲設置。 它包含“ id”,“ name”和“ value”列。 我需要選擇所有它們並使用鍵來簡單地獲取值。
SELECT * FROM settings
結果是:
array( array(id1, name1, value1), array(id2, name2, value2), ... )
我需要簡單地調用值,例如:
$value1 = $settings['name1'];
所以我應該將結果數組轉換為此:
array( name1 => value1, name2 => value2, ... )
如何使用PHP做到這一點?
您可以使用一系列內置函數來實現這一點,例如:
$a = array( array("key1" => "value1"), array("key2" => "value2"), array("key3" => "value3"));
$b = array_combine(
array_map('key', $a),
array_map('end', $a));
要么
$b = array_reduce($a, function($x, $y) { return $x + $y; }, $a[0]);
但是,php中的循環通常更干凈,更容易理解並且更高效:
$b = array();
foreach($a as $item)
$b += $item;
沒有合理的理由避免循環。
UPD,根據您的更新
$a = array( array('id1', 'name1', 'value1'), array('id2', 'name2', 'value2'));
$b = array_combine(
array_column($a, 1),
array_column($a, 2));
返回[name1] => value1, [name2] => value2
如果您的php不支持array_column
,則可以包含shim ,也可以僅使用一個循環,這又變得更加簡單易讀:
foreach($a as $x)
$result[ $x[1] ] = $x[2];
只是通過我也會提供這個。 這將使您無需創建副本即可獲得所需的內容。 如果恰好是一個很長的數組,您還可以獲得反向循環的效率。
$array = array( array("key1" => "value1"), array("key2" => "value2") );
for($i = sizeof($array) - 1; $i > -1; $i--) {
$key = array_keys($array[$i])[0];
$value = $array[$i][$key];
unset($array[$i]);
$array[$key] = $value;
}
var_dump($array);
或者,如果我們希望每個人在閱讀時都喜歡發生的事情,我們可以做到這一點。 盡管您現在要對array_keys進行兩次調用,但這並不是最佳選擇。
$array = array( array("key1" => "value1"), array("key2" => "value2") );
for($i = sizeof($array) - 1; $i > -1; $i--) {
$array[array_keys($array[$i])[0]] = $array[$i][array_keys($array[$i])[0]];
unset($array[$i]);
}
var_dump($array);
由於OP已像往常一樣從原始索引更改了該問題,因此您將不得不修改索引和其他一些操作,但是在發布原始數組的情況下這將起作用,而且我敢肯定,您可以弄清楚如何對其進行修改以使其適用於新數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.