簡體   English   中英

如何在PHP中將數組轉換為關聯數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM