Массив push строк из SQL-запроса

Я пытаюсь сохранить строки (результаты) из запроса 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 () ожидает, что параметр 2 будет массивом

Полный код здесь:

    $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);

-1

Решение

Как говорит ошибка, fputcsv ожидает, что каждая строка, которую вы поместите, будет массивом, поэтому она может записать ее запятыми, разделяющими элементы. $list должен быть двухмерным массивом, поэтому вам нужно вставить в него массив при его создании.

while ($row = $query->fetch_assoc() {
$list[] = array($row['campaign']);
}

КСТАТИ, $list[] = x эквивалентно array_push($list, x),

1

Другие решения

Когда вы изначально создаете $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, От документация PHP для array_push:

Примечание. Если вы используете array_push () для добавления одного элемента в массив, лучше использовать $ array [] =, потому что в этом случае нет необходимости вызывать функцию.

1

Это работает так:

while ($row = $query->fetch_assoc())
{
// array_push($list,$row['campaign'],'');
array_push($list,array($row['campaign'], ''));

}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector