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 回答