Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP关联数组-将-->替换为“as”_Php_Sql_Arrays_Key_Associative - Fatal编程技术网

PHP关联数组-将-->替换为“as”

PHP关联数组-将-->替换为“as”,php,sql,arrays,key,associative,Php,Sql,Arrays,Key,Associative,我知道必须有一个简单有效的方法来做到这一点 我有这样一个数组: $fields = array( "EVENT_ID" => "Event Id" , "EVENT_NAME" => "Name", "EVENT_CLASSIFICATION" => "Classification", "DESCRIPTION" => "Description",

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

我有这样一个数组:

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


有什么想法吗?

我强烈建议循环

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

在这里,循环可能是一种方式,但是你可以不用循环。使用

注意,在PHP5.3+中只能传递这样的函数。如果您使用的是5.2,那么可以使用


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

$query = '';
foreach($fields as $k => $v)
    $query .= '"' . $k . '" as "' . $v . '",';
echo $query;
请注意,这将留下一个尾随逗号。如果要删除它,可以使用

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

如果您使用的是5.3,那么您可以使用闭包,普通的旧函数也可以使用,但foreach会比它短:

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

很抱歉让您失望,但是如果您害怕循环,请忘记数组:以及一般的软件开发,除了Prolog、SQL和纯函数语言。@AndrejsCainikovs,忘记数组!?!还有什么更好的选择-但是你还是要说:谢谢!没有循环是不可能的?是的,看,但这也只是一个循环的包装。所以这并不重要。虽然我发现读起来比循环更难看起来不错,但我会选择$sel[]='$key'作为'$val'。这些倒勾可以让你随心所欲地使用保留的mysql单词。谢谢!看起来不错。哪一个是高效和快速的?循环还是这个?@KevinRave函数,比如array\u map,在引擎盖下使用循环,无论如何,里面不会有太多。也就是说,C++循环可能比PHP更有效,所以这可能稍微好一些。但是差别很小,除非你有成千上万的物品,否则它甚至不明显。虽然这确实会增加在下面循环的每次迭代中调用函数的开销,所以YMMV。对于这种情况,我更喜欢使用array_-map,但这也很有效+1.
$query = rtrim($query, ',');
$sql = array_reduce(array_keys($fields), function(&$result, $key) use ($fields) {
  if (!is_null($result)) $result .= ",\n";
  return "{$result}'{$key}' AS '{$fields[$key]}'";
});