javascript — что является дефектом в этом foreach PHP и коде JS

По сути, у меня есть два отдельных запроса, которые извлекают данные из базы данных и выводят в виде таблицы HTML. $result это результат запроса 1 и $result2 это результат запроса 2.

ДЕФЕКТ 1

Это код php, который выводится в HTML-таблицу:

echo "<table id='table'>";
while($row=pg_fetch_assoc($result2)){echo "<tr>";
echo "<td align='left' width='200'>" . $row['message_date'] . "</td>";
echo "<td align='left' width='200'>" . $row['message_text'] . "</td>";
echo "<td align='left' width='200'>" . $row['message_by'] . "</td>";
while($row2=pg_fetch_assoc($result)){
foreach($row2 as $rslt){
echo "<td align='left' width='200'>" . $rslt['recipient_name'] . "</td>";
echo "<td' align='left' width='200'>" . 0 . $rslt['phone_number'] . "</td>";
}
}
echo "</tr>";}
echo "</table>"

Недостаток заключается в том, что там, где, например, 20 получателей, то есть 20 имен и 20 телефонных номеров, все строки выводятся в таблицу 3-5 раз. Например:

|some-date|some-text|some-sender|John-Doe|12345|John-Doe|12345|John-Doe|12345|...

Я могу подтвердить, что в таблице нет ни одной записи для каких-либо имен. Почему это?

ДЕФЕКТ 2
Тогда есть JS внизу, если страница, которая берет все данные из вышеприведенной таблицы и в основном преобразует их в объект, затем преобразуется в строку. Хорошо работает только то, что в указанных выше проблемных полях получателей (имена и номера телефонов) требуются только самые первые имя и телефон, и я ожидаю, что данные о повторных получателях также будут там. Это код:

var table = document.getElementById('table');
var jsonArr = [];
for(var i =0,row;row = table.rows[i];i++){
var col = row.cells;
var jsonObj = {
message_by : col[2].innerHTML,
message_date : col[0].innerHTML,
message_recipients: [{
phone_number : col[4].innerHTML,
recipient_name : col[3].innerHTML,
}],
message_text : col[1].innerHTML,
subscriber_name: "myName"

}
console.log(jsonObj);

jsonArr.push(jsonObj);
}

var sendString = JSON.stringify(jsonObj);
console.log(sendString);

Что я делаю неправильно в выводе php в таблицу и почему JS не собирает все данные о получателях из таблицы?

РЕДАКТИРОВАТЬ — больше информации

Для дефекта 1 это то, что я ожидаю:

|message date| sender | recipient-1 name | recipient-1 phone | recipient-x name | recipient-x phone | message | subscriber-name |
|------------|--------|------------------|-------------------|------------------|-------------------|---------|-----------------|

и вот что я получаю (обратите внимание на повторяющуюся запись получателя, но теперь это так для всех получателей. Примерно в 3 раза, а иногда и в 5 раз):

|message date| sender | recipient-1 name | recipient-1 phone | recipient-1 name | recipient-1 phone | recipient-2 name | recipient-2 phone | message | subscriber-name |
|------------|--------|------------------|-------------------|------------------|-------------------|------------------|-------------------|---------|-----------------|
| some date  | Peter  |    John Doe      |    0700100100     |    John Doe      |    0700100100     |    Person 2      |    0700200200     |some text|     my name     |

Для дефекта 2 это то, что я ожидаю:

{
"message_by":"Senders Name",
"message_date":"2017-12-14 13:54:28.876",
"message_recipients":[
{
"phone_number":"0700100100",
"recipient_name":"Person One"},
{
"phone_number":"0700200200",
"recipient_name":"Person Two"},
{
"phone_number":"0700300300",
"recipient_name":"Person Three"}
],
"message_text":"Sample text",
"subscriber_name":"myName"}

И вот что я получаю:

{
"message_by":"Senders Name",
"message_date":"2017-12-14 13:54:28.876",
"message_recipients":[
{
"phone_number":"0700100100",
"recipient_name":"Only The First Person"}
],
"message_text":"Sample text",
"subscriber_name":"myName"}

0

Решение

другая проблема в вашем коде, которую вы еще не знаете (назовите ее дефект 3), выглядит следующим образом

Предположим, ваш result2 (1-й цикл while) получить 10 строк и result (2-й цикл while) также получает 10 строк.

|  result2  |      |  result   |
|-----|-----|      |-----|-----|
|  a1 |  b1 |      |  c1 |  d1 |
|  a2 |  b2 |      |  c2 |  d2 |
|  .. |  .. |      |  .. |  .. |
| a10 | b10 |      | c10 | d10 |

так что первая итерация вашего 1-го цикла будет производить первую строку, а затем в этой строке вы дамп все 10 строк result в столбцы в строке 1 result2

затем во второй итерации (вперед) 1-го цикла больше не будет строк из 2-го цикла, так что это будет выглядеть так:

|  a1 |  b1 |  c1 |  d1 |  c2 |  d2 |  .. |  .. | c10 | d10 |
|  a2 |  b2 |
|  .. |  .. |
| a10 | b10 |
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]