我的数据库中有一个用于存储设置的表。它包含'id','name'和'value'列。我需要选择所有这些并使用键来简单地获取值。
SELECT * FROM settings
结果是:
array( array(id1, name1, value1), array(id2, name2, value2), ... )
我需要简单地调用这些值,例如:
$value1 = $settings['name1'];
所以我应该将结果数组转换为:
array( name1 => value1, name2 => value2, ... )
如何使用PHP执行此操作?
答案 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像往常一样改变了原来的问题,但是发布的原始数组会有效,我相信你可以弄清楚如何修改它使用新阵列。