【问题标题】:PHP Associative Arrays - Replace --> with "as"PHP 关联数组 - 替换 --> 为 "as"
【发布时间】:2012-04-17 17:12:23
【问题描述】:

我知道必须有一种简单有效的方法来做到这一点。

我有一个这样的数组:

       $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 新手。

有什么想法吗?

【问题讨论】:

  • 很抱歉让你失望了,但如果你害怕循环,那就别管数组了:)
  • 以及一般的软件开发,可能除了 Prolog、SQL 和纯功能语言。
  • @AndrejsCainikovs,忘记数组!?!有什么更好的选择? :-)
  • 但是你循环数组 arrrggg :-)

标签: php sql arrays key associative


【解决方案1】:

我强烈建议使用循环!

$sel = array();
foreach($fields as $key => $val) {
  $sel[] = '`'.$key.'` AS `'.$val.'`';
}
$sel = implode(',', $sel);

【讨论】:

  • 谢谢!没有循环就不可能?
  • 是的,见Rockets answer,但这也只是一个循环的包装。所以这并不重要。 (虽然我发现这比循环更难阅读)
  • 看起来不错,但我会选择$sel[] = "'$key' as '$val'"
  • 那些反引号在那里,您可以根据需要使用保留的 mysql 字。
【解决方案2】:

循环是(可能)到这里的方式,但你可以在没有循环的情况下做到这一点。使用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)));

【讨论】:

  • 谢谢!这看起来不错的样子。哪一个是高效和快速的?循环还是这个?
  • @KevinRave 函数如array_map() 无论如何都在引擎盖下使用循环,其中不会有太多内容。也就是说,C++ 循环可能比 PHP 循环更有效,所以这可能稍微好一些。但差别如此之小,以至于除非您拥有数十万件物品,否则它甚至都不会引起注意。尽管这确实增加了在下面循环的每次迭代中调用函数的额外开销,所以 YMMV。
【解决方案3】:

如果您使用的是 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]}'";
});

Try online

【讨论】:

  • 在这种情况下我更喜欢array_map,但这也有效。 +1
【解决方案4】:

您可以通过遍历您的值来简单地构建您的查询字符串。

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

请注意,这将留下一个尾随逗号。如果你想删除它,你可以使用

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

Live example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2011-05-19
    相关资源
    最近更新 更多