来自 SQL 查询的数组推送行
Array push rows from SQL query
我正在尝试将 SQL 查询中的行(结果)保存到 csv 文件中。
我正在使用数组推送来将结果放入列表中。后来我把这个列表中的数据放到我的 csv 文件中。
我的代码:
while ($row = $query->fetch_assoc())
{
echo sprintf( $row['campaign']);
array_push($list, $row['campaign']);
}
结果在那里,因为 sprintf 有效。问题在于 array_push 的语法。我什至试过了:
array_push($list, array(''.$row['campaign']);
我收到一个错误:
fputcsv() expects parameter 2 to be array
完整代码在这里:
$list = array
(
array('old_campaign_name', 'new_campaign_name')
);
// table 1
$sql = ('select distinct(campaign) as campaign from '.$table1.'');
// Run the query
$query = $Db->query($sql);
// Check for SQL errors
if ($Db->error)
{
return ($Db->error);
}
// Put data in the list
while ($row = $query->fetch_assoc())
{
echo sprintf( $row['campaign']);
array_push($list,$row['campaign'],'');
}
$fp = fopen($location, 'w');
foreach ($list as $fields)
{
fputcsv($fp, $fields);
}
fclose($fp);
最初创建$list
数组时,它是一个包含一个数组的数组。但是,当您从查询结果中向它添加更多值时,您是在将字符串而不是数组推到它的末尾。实际上,您将制作类似
的内容
$list = array (
array('old_campaign_name', 'new_campaign_name'),
'first campaign',
'second campaign',
'etc.',
...
);
因此,当您遍历 $list
时,第一个值应该与 fputcsv
一起使用,因为它是一个数组,但任何后续值都将是字符串而不是数组,并且会导致您看到的错误。
您应该可以像这样填写 $list
:
while ($row = $query->fetch_assoc()) {
$list[] = $row;
}
$list[] = $row
不会覆盖之前在 $list
中的值。来自 the PHP documentation for array_push:
Note: If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function.
如错误所述,fputcsv
期望您放入的每一行都是一个数组,因此它可以用逗号分隔元素来写出它。 $list
应该是一个二维数组,所以你需要在构建它的时候将一个数组压入它上面。
while ($row = $query->fetch_assoc() {
$list[] = array($row['campaign']);
}
顺便说一句,$list[] = x
等同于 array_push($list, x)
。
它是这样工作的:
while ($row = $query->fetch_assoc())
{
// array_push($list,$row['campaign'],'');
array_push($list,array($row['campaign'], ''));
}
我正在尝试将 SQL 查询中的行(结果)保存到 csv 文件中。 我正在使用数组推送来将结果放入列表中。后来我把这个列表中的数据放到我的 csv 文件中。
我的代码:
while ($row = $query->fetch_assoc())
{
echo sprintf( $row['campaign']);
array_push($list, $row['campaign']);
}
结果在那里,因为 sprintf 有效。问题在于 array_push 的语法。我什至试过了:
array_push($list, array(''.$row['campaign']);
我收到一个错误:
fputcsv() expects parameter 2 to be array
完整代码在这里:
$list = array
(
array('old_campaign_name', 'new_campaign_name')
);
// table 1
$sql = ('select distinct(campaign) as campaign from '.$table1.'');
// Run the query
$query = $Db->query($sql);
// Check for SQL errors
if ($Db->error)
{
return ($Db->error);
}
// Put data in the list
while ($row = $query->fetch_assoc())
{
echo sprintf( $row['campaign']);
array_push($list,$row['campaign'],'');
}
$fp = fopen($location, 'w');
foreach ($list as $fields)
{
fputcsv($fp, $fields);
}
fclose($fp);
最初创建$list
数组时,它是一个包含一个数组的数组。但是,当您从查询结果中向它添加更多值时,您是在将字符串而不是数组推到它的末尾。实际上,您将制作类似
$list = array (
array('old_campaign_name', 'new_campaign_name'),
'first campaign',
'second campaign',
'etc.',
...
);
因此,当您遍历 $list
时,第一个值应该与 fputcsv
一起使用,因为它是一个数组,但任何后续值都将是字符串而不是数组,并且会导致您看到的错误。
您应该可以像这样填写 $list
:
while ($row = $query->fetch_assoc()) {
$list[] = $row;
}
$list[] = $row
不会覆盖之前在 $list
中的值。来自 the PHP documentation for array_push:
Note: If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function.
如错误所述,fputcsv
期望您放入的每一行都是一个数组,因此它可以用逗号分隔元素来写出它。 $list
应该是一个二维数组,所以你需要在构建它的时候将一个数组压入它上面。
while ($row = $query->fetch_assoc() {
$list[] = array($row['campaign']);
}
顺便说一句,$list[] = x
等同于 array_push($list, x)
。
它是这样工作的:
while ($row = $query->fetch_assoc())
{
// array_push($list,$row['campaign'],'');
array_push($list,array($row['campaign'], ''));
}