Как генерировать столбец используя для цикла - PullRequest
1 голос
/ 30 апреля 2020

Как заставить эту функцию создавать столбец occLvl_ l oop 3 раза и использовать explode для извлечения каждого значения из sql CONCAT. Таким образом, результат будет выглядеть следующим образом.

[{
   "accommodationID": "LA56",
   "occLvl_0": "40.00",
   "occLvl_1": "70.00",
   "occLvl_2": "90.00"
}]
function getOccLevel(){
  global $ehorsObj;
  $occArray = array();

  $sql = "SELECT accommodationID, GROUP_CONCAT(occLevelDesc) AS occLevels
          FROM tblSamAccOccLevels
          WHERE ACTIVE = 'y'
          GROUP BY accommodationID
          ORDER BY accommodationID ASC, occLevelDesc ASC "; 
  $GetResult = $ehorsObj->FetchData($sql, $ehorsObj->DEFAULT_PDO_CONNECTIONS);
  while ($row = $GetResult->fetch()){

    $occArray[] = array(
      'accommodationID' => $row['accommodationID'],
    );
    //seem the method below is not working
    for ($j = 0; $j < 3; $j++) {
      $occArray["occLvl_".$j] = explode(",", $row['occLevels']) 
    }
  } 
  header("Content-type: application/json");
  $result = json_encode($occArray);
  echo $result; 
}

Результат запроса

accommodationID         occLevels
     LA56           40.00, 70.00, 90.00

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Explode возвращает массив. Вы должны взорваться до l oop и просмотреть результат этого взрыва в l oop

0 голосов
/ 30 апреля 2020

Создание свойств / переменных с числовым именем объекта (occLvl_0 et c.), Как правило, является плохой идеей, поскольку затрудняет работу с ними любым обычным способом (например, с использованием al oop). Лучше практиковать помещение значений в массив:

while ($row = $GetResult->fetch()){
    $occArray[] = array(
        'accommodationID' => $row['accommodationID'],
        'occLvl' => explode(",", $row['occLevels'])
    );
} 

Это даст вам вывод JSON, который выглядит примерно так:

[
    {
        "accommodationID": "LA56",
        "occLvl": [
            40,
            70,
            90
        ]
    },
    {
        "accommodationID": "PQ45",
        "occLvl": [
            30,
            60,
            100
        ]
    },
    ...
]

И в вашем JS затем вы можете перебрать массив occLvl, чтобы получить значения.

Если вам нужны данные в описанной вами форме, то вам нужно перебрать взорванное значение occLevels, чтобы сгенерировать отдельные значения, выдвигая их с accommodationID в новый массив, а затем помещая этот массив в $occArray:

while ($row = $GetResult->fetch()){
    $this_occ = array(
            'accommodationID' => $row['accommodationID'],
        );
    foreach (explode(",", $row['occLevels']) as $key => $occLvl) {
        $this_occ["occLvl_$key"] = $occLvl;
    }
    $occArray[] = $this_occ;
}    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...