Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Marrex
0 / 0 / 1
Регистрация: 31.05.2016
Сообщений: 62
#1

Сортировать внутри foreach - PHP

24.12.2016, 17:28. Просмотров 707. Ответов 3
Метки нет (Все метки)

Здравствуйте друзья!
Есть код, который нормально работает и выводит то, что нужно!
Но тут возникла необходимость выводить по возрастанию и понижению даты!
К сожалению время разбросано в трех ячейках, собрали вместе превратили в число UNIX.
Все данные выводит print_r($parts); выводит список массивов... где в ячейке $parts[19] - наше число UNIX
Теперь эти массивы надо отсортировать, либо по повышению числа, либо по понижению...
Никак не могу сделать..
Спасибо заранее и огромная просьба!!! не бросайтесь камнями!
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
$poisk = "ALL";
$find = array();
 
// ищем строки
$home = $_SERVER['DOCUMENT_ROOT'];
$file = file($home.'/путь_до_файла/PAGES.txt');   
 
for ($i = 0; $i  < 50; $i++) {   
    $line = $file[$i];
    // если строка начинается с "$poisk", то заносим её в массив 
    if (strpos($line, $poisk) !== false) {
        $find[] = $line;
    }
}
if (empty($find)) 
{
    echo 'Ничего не найдено';
} 
else 
{
// итерируем массив и выбираем нужные данные
    foreach ($find as $item) 
{
// разбиваем строку на части
$parts = explode('::', $item);
//Ранее поленился сделать, так делаем теперь ... для сортировки 
if($parts[17] == "январь"){$month_data = '1';}
if($parts[17] == "февраль"){$month_data = '2';}
if($parts[17] == "март"){$month_data = '3';}
if($parts[17] == "апрель"){$month_data = '4';}
if($parts[17] == "май"){$month_data = '5';}
if($parts[17] == "июнь"){$month_data = '6';}
if($parts[17] == "июль"){$month_data = '7';}
if($parts[17] == "август"){$month_data = '8';}
if($parts[17] == "сентябрь"){$month_data = '9';}
if($parts[17] == "октябрь"){$month_data = '10';}
if($parts[17] == "ноябрь"){$month_data = '11';}
if($parts[17] == "декабрь"){$month_data = '12';}
 
//Превратим дату в  UNIX число
$parts[19] = strtotime($parts[16].'-'.$month_data.'-'.$parts[18]);
 
//Заменим значение 19 ячейки на UNIX
$item = str_replace("ALL", $parts[19], $item);
print_r($parts);
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2016, 17:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировать внутри foreach (PHP):

Foreach внутри foreach
Посетители сайта видят список альбомов в мозаичном виде по 3 альбома в ряд, 12...

Перевод текста в транслит внутри foreach
Хочу загружаемый файл переделать в транслит, для транслита планирую брать такую...

Как внутри foreach сдвинуть указатель массива вперед?
День добрый. Получаю выборку с sql так $stmtt =...

Вывод выбранных чекбоксов в таблице, которая внутри foreach
Добрый день, друзья! Прошу помочь в написании кода. В приведенном примере...

Сортировать массив по n -му элементу
Здравствуйте ! В общем к примеру задаю массив так $a = 3 $a = 5 $a = 4 ...

Группировать и сортировать личные сообщения
Как сгруппировать сообщения? Делаю так: $qMess =...

3
kposs
38 / 37 / 29
Регистрация: 02.12.2013
Сообщений: 241
24.12.2016, 18:03 #2
возможно эта функция поможет... http://www.php.su/functions/?array-multisort
0
Vshining
62 / 62 / 47
Регистрация: 04.12.2016
Сообщений: 215
Завершенные тесты: 1
24.12.2016, 21:58 #3
Функция сортирует по возрастанию. Если нужно поменять порядок - поменяйте порядок операндов в return.
PHP
1
2
3
usort($items, function($a, $b) {
    return $a[19] - $b[19];
});
0
Marrex
0 / 0 / 1
Регистрация: 31.05.2016
Сообщений: 62
25.12.2016, 00:21  [ТС] #4
1.Да! Спасибо! Только она будет работать с многомерным массивом $find... и если делать вывод(print_r), то будет повторять хренову тучу раз внутри foreach
2.items - это строка...
3.$parts - одномерный массив.
Вот если бы записать результат работы foreach в массив, и потом, за скобками foreach подвергнуть функции, то вот тогда сработает.. возможно..., но тогда весь вывод надо переделывать - он зависит от $parts внутри foreach
4.длительный процесс... Либо... не делать переработку даты внутри foreach, а изначально в файле добавить ещё одну ячейку с UNIX... подвергнуть функции до начала foreach , то заработает точно... и дополнительных проблем с выводом не возникнет...
5.либо, что-то придумать с массивом $find до начала foreach, заменить ячейку №19 на UNIX, там же отсортировать, а уже потом отдавать foreach ...
Вощем сегодня я его не победил... он меня...

Добавлено через 13 минут
P.S.
В свете последних думок... запись отдельными ячейками даты - изначально была глупой идеей!... да и вместо 3 ячеек можно было записать только одну с UNIX... и не возникло бы сейчас таких проблем.
Век живи, век учись, все равно дурнем останешься...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2016, 00:21
Привет! Вот еще темы с решениями:

Сортировать многомерный массив по алфавиту
Есть многомерный массив, который требуется поднимать вверх и опускать вниз...

Сортировать часть ассоциативного массива
Доброго времени суток. Есть меню, один из пунктов которого выпадающий список. В...

Foreach
Добрый день. Помогите пожалуйста ..как можно добавить в этот кусок кода такое...

Foreach в foreach?
Добрый день. Помогите разобраться. Пытаюсь вывести меню &lt;ul&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru