如何在PHP中将数组数组转换为关联数组

时间:2014-10-19 14:10:50

标签: php arrays

我的数据库中有一个用于存储设置的表。它包含'id','name'和'value'列。我需要选择所有这些并使用键来简单地获取值。

SELECT * FROM settings

结果是:

array( array(id1, name1, value1), array(id2, name2, value2), ... )

我需要简单地调用这些值,例如:

$value1 = $settings['name1'];

所以我应该将结果数组转换为:

array( name1 => value1, name2 => value2, ... )

如何使用PHP执行此操作?

2 个答案:

答案 0 :(得分:2)

您可以通过级联的内置函数实现这一目标,例如:

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

答案 1 :(得分:0)

通过我也会提供这个。这样您就可以在不创建副本的情况下获得所需内容。如果这是一个非常长的数组,你也可以获得反向循环的效率。

$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像往常一样改变了原来的问题,但是发布的原始数组会有效,我相信你可以弄清楚如何修改它使用新阵列。