Экспорт данных php в цикле в файл CSV - PullRequest
0 голосов
/ 25 мая 2019

Я написал код, который использует API fantasypremierleague.com для извлечения данных. Данные извлекаются за 38 игровых недель с использованием цикла for. Я печатаю данные, используя echo, чтобы убедиться, что они верны. У меня возникла проблема с преобразованием данных в файлы CSV с помощью сценария, поскольку он находится в цикле. После печати информации каждую игровую неделю я добавил кнопку (всего 38 кнопок), которая должна преобразовывать информацию каждой игровой недели в файл CSV.

В настоящее время все кнопки печатают информацию игровой недели 1, хотя скрипт является частью цикла.

ini_set('max_execution_time', 300);
for ($i=1; $i <39 ; $i++) { 


$json=file_get_contents("https://fantasy.premierleague.com/drf/entry/1224012/event/".$i."/picks");
$data = json_decode($json, true);
$json1=file_get_contents("https://fantasy.premierleague.com/drf/elements/");
$data1 = json_decode($json1, true);

?>

<table id ="gameweek_history">
<tr>
 <th>Average Gameweek Score</th>
 <th>Highest Score</th>
 <th>Highest Scorer ID</th>
</tr>
</br>
</br>

<td><?PHP echo $data['event']['average_entry_score']; ?></td>
<td><?PHP echo $data['event']['highest_score']; ?></td>
<td><?PHP echo $data['event']['highest_scoring_entry']; ?></td>

</table>


<table id ="gameweek_info">
<tr>
 <th>Gameweek</th>
 <th>Active Chip</th>
 <th>ID</th>
 <th>Points</th>
 <th>Total Points</th>
 <th>Rank</th>
 <th>Overall Rank</th>
 <th>Gameweek Transfers</th>
 <th>Gameweek Transfer Cost</th>
 <th>Points on Bench</th>
 <th>Bank</th>
 </tr>
 </br>
 </br>

<td><?PHP echo $data['entry_history']['event']; ?></td>
<td><?PHP echo $data['active_chip']; ?></td>
<td><?PHP echo $data['entry_history']['id']; ?></td>
<td><?PHP echo $data['entry_history']['points']; ?></td>
<td><?PHP echo $data['entry_history']['total_points']; ?></td>
<td><?PHP echo $data['entry_history']['rank']; ?></td>
<td><?PHP echo $data['entry_history']['overall_rank']; ?></td>
<td><?PHP echo $data['entry_history']['event_transfers']; ?></td>
<td><?PHP echo $data['entry_history']['event_transfers_cost']; ?></td>
<td><?PHP echo $data['entry_history']['points_on_bench']; ?></td>
<td><?PHP echo $data['entry_history']['bank']; ?></td>

</table>

</br>
</br>
</br>

<script>function doCSV() {
 var table1 = document.getElementById("gameweek_history").innerHTML;
 var data1 = table1.replace(/<thead>/g, '')
 .replace(/<\/thead>/g, '')
 .replace(/<tbody>/g, '')
 .replace(/<\/tbody>/g, '')
 .replace(/<tr>/g, '')
 .replace(/<\/tr>/g, '\r\n')
 .replace(/<th>/g, '')
 .replace(/<\/th>/g, ',')
 .replace(/<td>/g, '')
 .replace(/<\/td>/g, ',')
 .replace(/\t/g, '')
 .replace(/\n/g, '');
 var table2 = document.getElementById("gameweek_info").innerHTML;
 var data2 = table2.replace(/<thead>/g, '')
 .replace(/<\/thead>/g, '')
 .replace(/<tbody>/g, '')
 .replace(/<\/tbody>/g, '')
 .replace(/<tr>/g, '')
 .replace(/<\/tr>/g, '\r\n')
 .replace(/<th>/g, '')
 .replace(/<\/th>/g, ',')
 .replace(/<td>/g, '')
 .replace(/<\/td>/g, ',')
 .replace(/\t/g, '')
 .replace(/\n/g, '');
 var data= data1.concat(data2);
 var mylink = document.createElement('a');
 mylink.download = "Gameweek.csv";
 mylink.href = "data:application/csv," + escape(data);
 mylink.click();
}</script>

<button onclick="doCSV()">Export HTML Table To CSV File</button>

<?PHP
}
?>

Я ожидаю, что каждая кнопка преобразует информацию о конкретной игровой неделе, в которой в данный момент находится цикл (например, для i i = 1 следует экспортировать команду gameweek 1, если i = 2, следует экспортировать команду gameweek2)

1 Ответ

0 голосов
/ 26 мая 2019

Вам нужно будет добавить уникальные идентификаторы в каждую таблицу, например:

<table id ="gameweek_history<? echo $i; ?>">

Тогда вам нужно, чтобы ваш javascript ссылался на идентификатор. Ваш существующий код создает новый сценарий для каждой таблицы, поэтому для продолжения этого каждой функции потребуется уникальное имя, которое ссылается на эту таблицу.

<script>function doCSV<? echo $i; ?>() {
var table1 = document.getElementById("gameweek_history<? echo $i; ?>").innerHTML;

Вероятно, было бы лучше просто объявить одну функцию вне цикла и передать в нее переменную.

<script>function doCSV(table_number) {
var table1 = document.getElementById("gameweek_history" + table_number).innerHTML;

Затем добавьте номер таблицы в каждый обработчик событий.

<button onclick="doCSV(<? echo $i; ?>)">Export HTML Table To CSV File</button>
...