powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Группировка по буквам данных из базы по типу справочника номеров
7 сообщений из 7, страница 1 из 1
Группировка по буквам данных из базы по типу справочника номеров
    #39329808
Асланали
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сгруппировать отделения из базы по алфавиту.
Делаю так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
<?php
require_once 'dbconfig.php';

$stmt = $db_con->prepare("SELECT dr_name FROM department_region ORDER BY dr_name;"); 
$stmt->execute();

while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {

   $arr = array($row['dr_name']);

  foreach( $arr as $k => $val ){

    // первая буква
    $fl = get_first_letter( $val );
    $prev_fl = isset( $arr[ $k-1 ] ) ? get_first_letter( $arr[ $k-1 ] ) : '';
    if( $prev_fl != $fl )
      echo $fl . '<br>';

    // данные
    echo $val . '<br>';
  }
}

function get_first_letter( $str ){
  return mb_substr($str, 0, 1, 'utf-8');
}

?>



Выдает:
...
Рейтинг: 0 / 0
Группировка по буквам данных из базы по типу справочника номеров
    #39329842
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Асланали,

вообще удивляюсь что это хоть как-то работает.

Вы читаете [следующую] строку таблицы, потом берёте конкретную ячейку, а потом рассматриваете её как массив (набор байт) и сравниваете эти байты друг с другом.

Понятное дело получается у Вас далеко не то, чего Вы добивались.

Используйте не fetch, а fetchColumn. Эта функция сразу создаст для Вас массив, который Вы ожидали получить в строке
Код: php
1.
$arr = array($row['dr_name']);




На основе Вашего кода, вот это должно работать как ожидается (не тестировал):
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<?php
require_once 'dbconfig.php';

$stmt = $db_con->prepare("SELECT dr_name FROM department_region ORDER BY dr_name;"); 
$stmt->execute();

$arr=$stmt->fetchColumn();

  foreach( $arr as $k => $val ){

    // первая буква
    $fl = get_first_letter( $val );
    $prev_fl = isset( $arr[ $k-1 ] ) ? get_first_letter( $arr[ $k-1 ] ) : '';
    if( $prev_fl != $fl )
      echo $fl . '<br>';

    // данные
    echo $val . '<br>';
  }

function get_first_letter( $str ){
  return mb_substr($str, 0, 1, 'utf-8');
}

?>
...
Рейтинг: 0 / 0
Группировка по буквам данных из базы по типу справочника номеров
    #39329897
Асланали
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\sbyt\ars.php on line 14

Код: php
1.
foreach( $arr as $k => $val )
...
Рейтинг: 0 / 0
Группировка по буквам данных из базы по типу справочника номеров
    #39329906
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АсланалиПрограмёр,

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\sbyt\ars.php on line 14

Код: php
1.
foreach( $arr as $k => $val )



Да, простите... так и есть. Чистым PDO уже давно не пользовался :) не fetchColumn надо использовать, а
Код: php
1.
$arr=$stmt->fetchAll(PDO::FETCH_COLUMN);
...
Рейтинг: 0 / 0
Группировка по буквам данных из базы по типу справочника номеров
    #39329917
Асланали
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отлично.
Спасибо, все сработало как нужно
...
Рейтинг: 0 / 0
Группировка по буквам данных из базы по типу справочника номеров
    #39330200
Асланали
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сделать и так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?php
require_once 'dbconfig.php';

$stmt = $db_con->prepare("SELECT dr_name, LEFT(dr_name, 1) as fl FROM department_region ORDER BY dr_name;"); 
$stmt->execute();

$newArr = array();

while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {
  
  $newArr[$row['fl']][] = $row['dr_name'];

}

print_r($newArr);
?>
...
Рейтинг: 0 / 0
Группировка по буквам данных из базы по типу справочника номеров
    #39330345
Асланали
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные выводятся в столбик, а как вывести как на фото выше в виде сетки?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Группировка по буквам данных из базы по типу справочника номеров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]