php для angular, сохранение данных массива

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