2015-08-27 60 views
0

编号:Foreach loop declare variable on select table arrayForeach循环声明不同的变量取决于选择列

OK .....没有更多的语法错误

同样的问题

  • 是否有可能foreach循环中创建变量每个变量名都依赖于我选择的列名?

我编写出像

$recid = $_GET['recid']; 
//sql select string declaration 
$sql = "select [Rec_ID],[Bike_ID],[Station],['Line'] 
     from [rfttest].[dbo].[RFT_Records_Log] 
     where [Rec_ID] = {$recid}"; 
$query = sqlsrv_query($conn,$sql); //query 
//if query fail print out error 
if($query === false) 
{ 
    die(print_r(sqlsrv_errors(),true)); 
    sqlsrv_close($conn); 
} 
//continue with fetch array 
$recdata = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC); 
//foreach to declare variable 
foreach($recdata as $x => $a) 
{ 
    $"$x" = $"$a"; 
} 

结果应该是

$Rec_ID = row rec_id data , 
$Bike_ID = row bike_id data, 
$Station = row station data, 
$Line = row line data 

,但我得到这些,而不是

$row rec_id data = row rec_id data , 
$row bike_id data = row bike_id data, 
$row station data = row station data, 
$row line data = row line data 

回答

1

你有两个选择。

一(更安全的一种)是使用list()

list($Rec_ID, $Bike_ID, $Station, $Line) = $recdata; 

这意味着,变量名不能被意外覆盖变量。

两(安全性较低的一个)是利用extract()

extract($recdata); 

这接通一个关联数组到许多变量,但默认将覆盖与被设定为相同名称的任何变量。这是最接近你目前想要做的。

你也可以传递一个标志,extract告诉它覆盖现有的变量(或做一些其他的事情,当有冲突)。

extract($recdata, EXTR_SKIP); 
+0

如果我使用'“SELECT *”' –

+0

恕我直言,这是不好的做法(我想知道什么我找回,因为如果我问“什么是有”表模式的变化可能断码) 。如果你知道那里有什么字段,'list()'仍然可以正常工作,如果你不知道那里有什么,'extract'也可以工作(假设你从SQL数据源中获取了一个关联数组)。 – samlev