我有一个来自键值表的数组,看起来像这样(直接来自数据库):
$application_strings = array(
array('key' => 'building_type', 'value' => 'Building Type'),
array('key' => 'application', 'value' => 'Application'),
);
/* would print_r like so:
Array(
[0] => Array([key] => 'building_type', [value] => 'Building Type'),
[1] => Array([key] => 'application', [value] => 'Application')
)
*/
并希望将其转换为类似
的内容$strings = array(
'building_type' => 'Building type',
'application' => 'Application',);
/* would print_r like so:
Array(
[building_type] => 'Building Type',
[application] => 'Application'
)
*/
我目前的做法如下:
$strings_statement = DB::getDB()->prepare(
"SELECT `key`, `value` FROM `strings`
WHERE `lang` = (SELECT `lang` FROM `sites` WHERE `key`=:key)");
$strings_statement->execute(array(':key' => 12345));
$application_strings = $strings_statement->fetchAll(PDO::FETCH_ASSOC);
$strings = array();
foreach($application_strings as $string) {
$strings[$string['key']] = $string['value'];
}
这可以更短/更好吗?
答案 0 :(得分:1)
$application_strings = array(
array('key' => 'building_type', 'value' => 'Building Type'),
array('key' => 'application', 'value' => 'Application'),
);
$output = array();
array_map(function($x) use (&$output) {
$output[$x['key']] = $x['value'];
}, array_values($application_strings));
如果你不想要一个循环,我想出的解决方案就像Daniel的回答一样。
答案 1 :(得分:1)
添加其他答案,因为第一个使用array_map来转换当前数组,但这不是仅仅转换数组(我没有第一次捕获它),是转换/合并某种数组,进入某种“对象”。
因此,array_map不是更快,走进数组的更快的函数是array_walk:
$application_strings = array(
array('key' => 'building_type', 'value' => 'Building Type'),
array('key' => 'application', 'value' => 'Application'),
);
$strings = array();
array_walk ($application_strings, function ($row) use(&$strings) {
$strings[ $row['key'] ] = $row['value'] ;
}, $strings);
echo '<pre>';
print_r( $strings );
echo '</pre>';
输出:
Array
(
[building_type] => Building Type
[application] => Application
)
答案 2 :(得分:1)
自PHP5.5起,解决方案为array_column:
$application_strings = [
[
'key' => 'building_type',
'value' => 'Building Type'
],
[
'key' => 'application',
'value' => 'Application'
],
];
$output = array_column($application_strings, 'value', 'key');
print_r($output);
给出:
Array
(
[building_type] => Building Type
[application] => Application
)
答案 3 :(得分:0)
这是一个数组地图,试试这个:
$application_strings = array(
array('key' => 'building_type', 'value' => 'Building Type'),
array('key' => 'application', 'value' => 'Application'),
);
function transform($row){
return array( $row['key'] => $row['value'] );
}
$strings = array_map ('transform', $application_strings);
echo '<pre>';
print_r( $strings );
echo '</pre>';
这给出了
Array(
[0] => Array([building_type] => 'Building type'),
[1] => Array([application] => 'Application')
)