Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2017, 21:03   #1
Юрий+
Пользователь
 
Регистрация: 28.02.2014
Сообщений: 13
По умолчанию Проблема с сортировкой массива

Потребовалась сортировка массива так, чтобы было:

А
Архангельск
Астрахань
Б
Бобруйск
...

итд.

нашел пример кода:
PHP код:
<?php

function sorting( & $array )
    {
        
# "Память"
        
$memory NULL;
        
        
# Новый массив
        
$sorting = array();
        
        
# Обходим массив
        
foreach( $array as $key=>$item )
        {
            
# Получаем первую букву
            
$letter mb_substr$item01'utf-8' );
            
            
# Если текущая буква не равна предыдущей
            
if( $letter != $memory )
            {
                
# Заносим букву в "память"
                
$memory $letter;
                
                
# Добавляем новый массив
                
$sorting[$memory] = array();
            }
            
            
# Дополняем массив
            
$sorting[$memory][$key] = $item;
        }
        
        
# Назвачаем массив
        
$array $sorting;
    }





# Исходный массив
    
$array = array( "ананас""булка""патисон""арбуз" );
    
    
# Сортируем по алфавиту
    
asort$array );
    
    
# Формируем массив разбитый на категории
    
sorting$array );
    
    
# Выводим
    
foreach( $array as $key=>$items )
    {
        
# Выводим букву раздела
        
echo mb_strtoupper$key'utf-8' ) . "<br>";
        
        
# Выводим значения
        
foreach( $items as $value )
        {
            echo 
$value "<br>";
        }
    }

?>
Но не работает. Помогите...
Юрий+ вне форума Ответить с цитированием
Старый 05.04.2017, 21:12   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Всё работает.
Нужно просто явно задать кодировку.
Например, добавить в начало скрипта:
PHP код:
header('Content-Type: text/html; charset=utf-8'); 
Результат:
Andkorol вне форума Ответить с цитированием
Старый 05.04.2017, 21:14   #3
Юрий+
Пользователь
 
Регистрация: 28.02.2014
Сообщений: 13
По умолчанию

Спасибо!
Юрий+ вне форума Ответить с цитированием
Старый 06.04.2017, 19:27   #4
Юрий+
Пользователь
 
Регистрация: 28.02.2014
Сообщений: 13
По умолчанию

теперь пытаюсь вывести также с бд и опять ошибка - Warning: mb_substr() expects parameter 1 to be string, array given in Z:\home\test3.oop\www\massive.php on line 16

PHP код:
<?php
header
('Content-Type: text/html; charset=utf-8');  

function 
sorting( & $array )
    {
        
# "Память"
        
$memory NULL;
        
        
# Новый массив
        
$sorting = array();
        
        
# Обходим массив
        
foreach( $array as $key=>$item )
        {
            
# Получаем первую букву
            
$letter mb_substr$item01'utf-8' );
            
            
# Если текущая буква не равна предыдущей
            
if( $letter != $memory )
            {
                
# Заносим букву в "память"
                
$memory $letter;
                
                
# Добавляем новый массив
                
$sorting[$memory] = array();
            }
            
            
# Дополняем массив
            
$sorting[$memory][$key] = $item;
        }
        
        
# Назвачаем массив
        
$array $sorting;
    }


try {
$pdo = new PDO('mysql:host=localhost;dbname=db1''root''');
    }
    catch (
PDOException $e) {echo "ERROR CONECTION DB";}
    
///выборка из бд

try{
$query ="SELECT * FROM citys";
$city=$pdo->query($query);
$array=$city->fetchAll();
# Сортируем по алфавиту

print_r($array);
  
# Исходный массив
    //$array = array( "ананас", "булка", "патисон", "арбуз" );
    
    # Сортируем по алфавиту
    
asort$array );
    
    
# Формируем массив разбитый на категории
    
sorting$array );
    
    
# Выводим
    
foreach( $array as $key=>$items )
    {
        
# Выводим букву раздела
        
echo mb_strtoupper$key'utf-8' ) . "<br>";
        
        
# Выводим значения
        
foreach( $items as $value )
        {
            echo 
$value "<br>";

    }}
    
}catch (
PDOException $e)
{
echo 
"ERROR DB QUERY" $e->getMessage();
}
?>
Что делаю не так?
Юрий+ вне форума Ответить с цитированием
Старый 06.04.2017, 19:41   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Твой массив $array теперь имеет другую структуру – чем тот, для которого ты писал код в функции sorting().
Ты же выводишь на экран новый массив $array – неужели не заметно, что он совсем не похож по структуре на тот массив, что у тебя помечен в коде как #Исходный массив?
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с сортировкой массива jirtreck Visual C++ 3 21.10.2015 11:28
проблема с сортировкой двумероного массива Axelvox C# (си шарп) 0 03.12.2014 23:10
Проблема с сортировкой массива VB Heng Помощь студентам 3 25.09.2013 14:08
Проблема с сортировкой массива GaJIbI4 Помощь студентам 7 04.01.2012 02:05
задача с сортировкой массива, java dungle Помощь студентам 0 17.12.2011 16:40