可以';t将两个数组合并为一个数组来获取sql查询


Can't bring two arrays into one to fetch sql query

这听起来像是一个愚蠢的问题,但我找不到答案。目前我有这个。

$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++;}

我不太确定为什么这能工作