#php #angular
#php #angular
Вопрос:
У меня есть свой php
код, который сохраняет данные моей БД в массив. Затем я использую json_encode
его для отправки в angular.
В Angular я использую httpClient
метод get для получения моих данных. Но я получил данные во многих objects
, а array
не так, как я форматирую их в своем php
коде.
Я пытался использовать JSON.parse
в angular с моим responseData
, но я получил ошибку. Я бы хотел сохранить свой array
or array
(from php
), поскольку мне нужно использовать *ngFor
in angular
, который работает только с массивом.
phpcode :
$q=mysqli_query($mysqli, "SELECT user_id FROM USER WHERE type='joueur'
");
while ($row=mysqli_fetch_object($q)){
$result[]=$row;
}
foreach($result as $key => $re) {
$id = $re -> user_id;
$get_matinal = mysqli_query($mysqli, "SELECT MATINAL.*, USER.nom, USER.prenom FROM MATINAL
INNER JOIN USER
ON USER.user_id = MATINAL.user_id
WHERE USER.user_id = $id
");
$while_index = 0;
while($row=mysqli_fetch_object($get_matinal)) {
$get_matinal_resultat[$id]['DataSet']['data'][$while_index] = $row -> moyenne_fatigue;
$get_matinal_resultat[$id]['DataSet']['label'] = 'indice';
$get_matinal_resultat[$id]['Label'][$while_index] = $row -> created_at;
$while_index = $while_index 1;
}
}
echo json_encode($get_matinal_resultat);
echo mysqli_error($mysqli);
угловой код :
this.http.get(this.server 'getMatinal.php').subscribe(resData => {
this.full_graph = resData;
console.log(this.full_graph);
})
Вот журнал консоли
Итак, я получил объект объекта, тогда как в php я сделал массив массива. Я бы хотел сохранить «атрибут», поскольку это «индексированный массив», но тогда мне нужно иметь несколько массивов, а не объектов..
Надеюсь, я правильно это объяснил.
Обновить :
Вот что я хотел бы получить в результате :
this.full_graph =
[
{
user_id : '9',
dataset: [{data:[2,4,3,3,5], label:'indice'}],
label: ['1','2','3','4','5']
},
{
user_id : '15',
dataset: [{data:[2,4,3,3,5], label:'indice'}],
label: ['1','2','3','4','5']
},
]
Спасибо
Комментарии:
1. javascript не поддерживает ассоциативный массив, поэтому они преобразуются в объекты. Если вы можете включить ожидаемый результат, мы можем помочь.
2. Спасибо за ответ @JitendraYadav. Я обновил свой пост с результатом, который я хотел бы
Ответ №1:
Некоторые ключевые моменты, на которые следует обратить внимание при создании массива, эквивалентного JavaScript.
- Массив с числовым индексом, начинающимся с 0, 1, 2 … и так далее, также будет эквивалентен массиву JavaScript.
- Если вам нужно постоянное значение внутри массива, не перебирайте его, просто установите его вне цикла, например
label in dataset index
. - Не используйте
id
в качестве индекса, это создаст объекты из-за непоследовательных значений.
$response = [];
$q=mysqli_query($mysqli, "SELECT user_id FROM USER WHERE type='joueur'");
while ($row =mysqli_fetch_object($q)){
$userData = [];
$userData['user_id'] = $row->user_id;
$get_matinal = mysqli_query($mysqli, "SELECT MATINAL.*, USER.nom, USER.prenom
FROM MATINAL
INNER JOIN USER ON USER.user_id = MATINAL.user_id
WHERE USER.user_id = $row->user_id
");
$while_index = 1;
$matinal_result = [];
$labels = [];
while($matinal = mysqli_fetch_object($get_matinal)) {
$labels[] = $while_index; // if want created_at use $matinal->created_at
$matinal_result[] = $matinal->moyenne_fatique;
$while_index = $while_index 1;
}
$userData['Dataset'][] = ['data' => $matinal_result , 'label' => 'indice'];
$userData['label'] = $labels;
$response[] = $userData;
}
echo json_encode($response);