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

如何在PHP中将数组数组转换为关联数组,php,arrays,Php,Arrays,我的数据库中有一个用于存储设置的表。它包含“id”、“name”和“value”列。我需要选择所有这些,并使用键简单地获取值 SELECT * FROM settings 结果是: array( array(id1, name1, value1), array(id2, name2, value2), ... ) 我需要简单地调用这些值,如: $value1 = $settings['name1']; 因此,我应该将结果数组转换为: array( name1 => value1, n

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

SELECT * FROM settings
结果是:

array( array(id1, name1, value1), array(id2, name2, value2), ... )
我需要简单地调用这些值,如:

$value1 = $settings['name1'];
因此,我应该将结果数组转换为:

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

如何使用PHP实现这一点?

我也会提供这一点。这将允许您在不创建副本的情况下获得所需内容。如果这恰好是一个很长的数组,那么还可以获得反向循环的效率

$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 = 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已经像往常一样改变了原来的问题,但在发布原始数组后,这将起作用,我相信你可以找到如何修改它以使用新数组。

你可以通过级联内置函数来实现这一点,例如:

$a = array( array("key1" => "value1"), array("key2" => "value2"), array("key3" => "value3"));

$b = array_combine(
    array_map('key', $a),
    array_map('end', $a));

但是,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\u column
,则可以包含循环,或者只使用循环,这再次证明更简单、更可读:

foreach($a as $x)
    $result[ $x[1] ] = $x[2]; 

我同意“避免”功能是个坏主意;然而,有充分的理由说明为什么循环常常是一个糟糕的选择。它们是不可组合的,例如,我们不能做
foreach(foreach$x作为$y{}作为$z{}
,但我们可以轻松地做
array\u-map($f,array\u-map($g,$x))
或(更有效的)
array\u-map(compose($f,g),$x)
。它们不允许抽象,例如,我们可以做
f($x,'array_-map')
,但我们不能做
f($x,'for')
。你的“更干净、更容易理解、更高效”的例子实际上是一个丑陋、复杂、缓慢的
$c=array\u sum($a)
@georg啊,是的,我错了。我看到“+=”并假设它是在计算数字总数,而不是合并在一起的数组。对不起,我的web服务器上没有定义数组\列。还有其他方法吗?我的服务器是PHPV5.3。28@JohnSmith:只需使用一个循环:
foreach($a作为$x)$result[$x[1]]=$x[2]
foreach($a as $x)
    $result[ $x[1] ] = $x[2];