这听起来像是一个愚蠢的问题,但我找不到答案。目前我有这个。
$result = mysql_query($query) or die("SQL Error 1: " . mysql_error());
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$gridData[] = array(
'CompanyName' => $row['CompanyName'],
'ContactName' => $row['ContactName'],
'ContactTitle' => $row['ContactTitle'],
'Address' => $row['Address'],
'Country' => $row['Country'],
'Parent' => $row['Parent'],
'City' => $row['City'],
'id' => $row['id']
);
}
但假设我不想硬编码这个字段,我有另一个数组,它存储在$fields中,内部有数组的结构,所以field[0]就是字段名。
所以我做
foreach ($fields as $field)
{
$gridData[$field[0]] => $row[$field[0]];
}
由于某种原因,它不能这样工作。如何正确地做到这一点?我怎样才能把这些结合起来?
$gridData[] = array()
将向$gridData数组添加一个数值索引,该数组的值为。你正在尝试进行
$gridData[$field[0]] => $row[$field[0]];
其试图引用字符串索引。尝试:
foreach ($gridData as $rowIndex => $gridRow){
foreach ($fields as $field)
{
$gridData[$rowIndex][$field[0]] => $row[$field[0]];
}
}
或者,如果您可以修改字段数据结构,则可以使用http://php.net/manual/en/function.array-merge.php
这种方式:
$result = mysql_query($query) or die("SQL Error 1: " . mysql_error());
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
$gridData[] = $row;
或者这样:
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
array_push($gridData, $row);
编辑:如果你真的只想获得表中的一些列,你必须在查询中过滤它们:
$fields=Array("name", "firstname");
$query="SELECT ".join(",", fields)." FROM table WHERE";
如果$fields
的结构是数组$fields=Array(Array("name"), Array("firstname"));
的数组,如前面的注释所述,则可以使用array_map(create_function('$a', "return $a[0];"), $fields)
为前面的命令提取格式良好的数组
$i=0;
$e=count($fields);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$gridData[$i]=array( );
$e=0;
$fin=count($fields);
//echo "<h1>".$fin."</h1>";
while ($e < $fin){
$gridData[$i]=array_merge($gridData[$i], array( $fields[$e][0] => $row[$fields[$e][0]]));
$e++;
}
$i++;}
我不太确定为什么这能工作