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