0

次のようなKey-Valueテーブルの配列があります(DBから直接取得されます)。

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

これはより短く/より良く行うことができますか?

4

4 に答える 4

1

最初のものはarray_mapを使用して現在の配列を変換したため、他の回答を追加しますが、これは単に配列を変換することではなく(初めてキャッチしませんでした)、ある種の配列を何らかの種類に変換/マージすることです"物体"。

したがって、array_map は高速ではなく、Array に入る高速な関数は 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
)
于 2012-07-19T15:22:42.750 に答える
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')
)
于 2012-07-19T14:29:18.033 に答える