0

これを行うための簡単で効率的な方法が必要であることはわかっています。

私はこのような配列を持っています:

       $fields = array( "EVENT_ID" => "Event Id" ,
            "EVENT_NAME"           => "Name",
            "EVENT_CLASSIFICATION" => "Classification",
            "DESCRIPTION"          => "Description",
            "START_TIME"           => "Start Time",
            "END_TIME"             => "End Time"
           );

これを次のクエリとして変換したいと思います。

              Select 
                   "EVENT_ID" as "Event ID",
                   "EVENT_NAME" as "Name", 
                   ...
              from
                   ...

これをループに入れたくありません。PHP には多くの配列処理関数があり、これは簡単なはずです。私はphpが初めてです。

何か案は?

4

4 に答える 4

5

ループを強くお勧めします!

$sel = array();
foreach($fields as $key => $val) {
  $sel[] = '`'.$key.'` AS `'.$val.'`';
}
$sel = implode(',', $sel);
于 2012-04-17T17:14:36.637 に答える
3

ループは (おそらく) ここで使用する方法ですが、ループがなくても実行できます。を使用しarray_mapます。

$sql = implode(',', array_map(function($v, $k){
    return "`$k` AS `$v`";
}, $fields, array_keys($fields)));

PHP 5.3 以降では、このような関数のみを渡すことができます。5.2 を使用している場合は、 を使用できますcreate_function

$sql = implode(',', array_map(create_function('$v, $k', 'return "`$k` AS `$v`";'), $fields, array_keys($fields)));
于 2012-04-17T17:20:40.070 に答える
2

5.3 を使用している場合はarray_reduce、クロージャーを使用できます (プレーンな古い関数も機能しますが、それforeachよりも短くなります)。

$sql = array_reduce(array_keys($fields), function(&$result, $key) use ($fields) {
  if (!is_null($result)) $result .= ",\n";
  return "{$result}'{$key}' AS '{$fields[$key]}'";
});

オンラインで試す

于 2012-04-17T17:29:13.790 に答える
0

値をループすることで、クエリの文字列を簡単に作成できます。

$query = '';
foreach($fields as $k => $v)
    $query .= '"' . $k . '" as "' . $v . '",';
echo $query;

これにより、末尾のコンマが残ることに注意してください。削除したい場合は、使用できます

$query = rtrim($query, ',');

実際の例

于 2012-04-17T17:21:38.460 に答える