Как сгруппировать главу по штатам и по 3 городам в ряду в PHP mysql - PullRequest
0 голосов
/ 07 июня 2018

У меня есть таблица mysql с указанием штата, города.

Мой запрос выглядит так:

$result = mysqli_query($con, "select *  from " . $loc_tbl . "  order by city ASC");

echo "<html><head></head><body> 
<table>"; 

$num_columns = 3;
$num_rows = mysqli_num_rows($result);
$i=0;
while($row = mysqli_fetch_assoc($result)){
    $results[$i] = $row['city'];
    $i++;
}
unset($i);
$k=0;
for ($i=0;$i<=($num_rows/($num_columns+1));$i++){
    echo '<tr>';

for($j=1;$j<=$num_columns;$j++){
    echo '<td>'.$results[$k].'</td>';
    $k++;
}

echo '</tr>';
$k++;
}
echo "</table></body>
</html>";

Хотел бы отобразить состояние в виде заголовка

              California
---------------------------------------
San Jose | Santa Clara | Palo Alto
---------------------------------------
Los Angeles | Orange County | Los Gatos
---------------------------------------

              New Jersey
---------------------------------------
Morristown | Union | Summit
---------------------------------------
Newark | Parsipenny | Atlantic City

Я могу распределить города по 3 колонкам в каждой строке

1 Ответ

0 голосов
/ 07 июня 2018

Пожалуйста, попробуйте это -

Шаги:

1) Преобразовать данные строки в массив так, чтобы состояние было ключом, имеющим значение как массив городов

2) Отображать с помощьюотношение к значению, определенному для $ num_columns

$result = mysqli_query($con, "select *  from " . $loc_tbl . "  order by city ASC");
$num_columns = 3;

/* Step 1 :
 * $rows will be array having
 * State as key and array of cities as value
 */
$rows = array();
while($row = mysqli_fetch_assoc($result)){
    if(!isset($rows[$row['state']])){
        $rows[$row['state']] = array();
    }
    $rows[$row['state']][] = $row['city'];
}


/* Step 2 :
 * Following table will have columns with respect to value defined for  $num_columns
 */
echo "<table>";
foreach($rows as $state => $cities){
    echo '<tr><th colspan="'. $num_columns .'">'. $state .'</th></tr>';
    $cityChunks = array_chunk ($cities, $num_columns);   // split array into chunk of $num_columns cities per array
    foreach($cityChunks as $row){
        echo "<tr>";
        for($i=0; $i<$num_columns; $i++){
            $city = isset($row[$i]) ? $row[$i] : "";
            echo "<td>$city</td>";
        }
        echo "</tr>";
    }
}
echo "</table>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...