Estoy tratando de mostrar un gráfico usando chart.js, los datos del gráfico se obtendrán de una base de datos php mysql y se mostrarán en la función a continuación;
const pieChart2 = new Chart(document.getElementById('chats'), { type: 'pie', data: { labels: ['John Mark', 'Sandra Friday', 'Kelvin Russel'], //php code to display data datasets: [{ data: [25, 12, 4], //php code to display data backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56'], hoverBackgroundColor: ['#FF6384', '#36A2EB', '#FFCE56'] }] }, options: { responsive: true } });Puedo obtener datos de mi base de datos
$rscht = mysqli_query($conn,"SELECT users.name, COUNT(*) AS times FROM chat_logs INNER JOIN users ON chat_logs.sender_email = users.email GROUP BY chat_logs.sender_email ORDER BY times DESC");También puedo convertir los datos a una matriz php usando jsonencode
<?php $chatstack = array(); while($userchat= mysqli_fetch_array($rscht)){ $chatstackitem['label'] = $userchat['name']; $chatstackitem['value'] = $userchat['times']; array_push( $chatstack, $chatstackitem ); } $chatArray = json_encode( $chatstack ); print_r( $chatArray ); ?>El resultado anterior me da
<canvas id="chats"></canvas> [{"label":"John Mark","value":"25"},{"label":"Sandra Friday","value":"12"},{"label":"Kelvin Russel","value":"4"}]Mi pregunta ahora es, ¿cómo puedo mostrar el código php que muestra toda la matriz de nombres (etiqueta) en las etiquetas: sección
labels: ['John Mark', 'Sandra Friday', 'Kelvin Russel'], //php code to display datay también muestra el código php que muestra los valores en la sección de datos
data: [25, 12, 4], //php code to display dataEntonces, PHP es una tecnología del lado del servidor back-end, JS en este contexto es un contexto solo del lado del cliente. PHP le permitirá imprimir estos datos codificados en json en un bloque de script que le permitirá asignar estos datos a una variable JS.
Alternativamente, podría usar una cookie para almacenar estos datos y leerlos desde allí.
Debe proporcionar las etiquetas y los datos por separado. Podrías crear dos variables en tu ciclo para esto:
$chatLabels = []; $chatData = []; while ($userchat= mysqli_fetch_array($rscht)) { $chatLabels[] = $userchat['name']; $chatData[] = $userchat['times']; } $chatLabelsJson = json_encode($chatLabels); // ["John Mark","Sandra Friday","Kelvin Russel"] $chatDataJson = json_encode($chatData); //["25","12","4"] Alternativamente, podría usar array_column para extraer los datos de su matriz $chatstack existente:
$chatLabels = array_column($chatstack, 'label'); $chatData = array_column($chatstack, 'value'); $chatLabelsJson = json_encode($chatLabels); // ["John Mark","Sandra Friday","Kelvin Russel"] $chatDataJson = json_encode($chatData); //["25","12","4"]