Двойная сортировка по массиву

400
31 октября 2017, 00:07

Добрый день профессионалы, нужно было отсортировать массив по возрасту. Мне дали хороший совет реализации в php7 (см ниже). Но как мне добавить дополнительную сортировку по Имени, после того как отсортировалось по возрасту? (в реальном примере людей больше 500 а возраст указан только у 10%)

<?php
    $entries=array();
    $entries[0]["displayname"]="Ivan"  ;
    $entries[0]["age"]=32              ;
    $entries[1]["displayname"]="Anna"  ;
    $entries[1]["age"]=24              ;
    $entries[2]["displayname"]="Bob"   ;
    $entries[2]["age"]=29              ;
    $entries[3]["displayname"]="Stuart";
    $entries[3]["age"]=28              ;
    For ($i=0; $i<4; $i++) {echo $entries[$i]["displayname"] .' '. $entries[$i]["age"].'<br>';}
    ?>

Решение:

usort($entries,function($a,$b) { 
    return $a['age'] > $b['age'];
});
Answer 1
usort($entries, function($a, $b) {
    if (!is_numeric($a['age']) && is_numeric($b['age'])) {
        // Не указан возраст А
        return false;
    } else if (is_numeric($a['age']) && !is_numeric($b['age'])) {
        // Не указан возраст Б
        return true;
    } else
    if (is_numeric($a['age']) && is_numeric($b['age']) && ($a['age'] != $b['age'])) {
        // Сравниваем по возрасту
        return $a['age'] > $b['age'];
    } else {
        // Если оба возраста не указаны, или указаны и равны, то сравниваем по имени
        return $a['displayname'] > $b['displayname'];
    }
});
Answer 2

Не знаю почему заработала сортировка array_multisort, хотя все на забугорных сайтах ругают что она не сортирует числа. Короче вот простая реализация моего вопроса. Возраст - это extansionattribute2

foreach ($entries as $key => $row) {
     $extensionattribute2[$key]  = $row['extensionattribute2'];
     $displayname[$key]  = $row['displayname'];
    array_multisort($extensionattribute2, SORT_DESC, $displayname, SORT_ASC, $entries);
READ ALSO
Приходят пустые поля phpmailer

Приходят пустые поля phpmailer

Почему то приходит пустые поля в письме

253
отобразить META тег как текст

отобразить META тег как текст

здравствуйте, столкнулся с проблемой, не могу понять как отобразить любой META тег на странице в виде обычного текстаЕсть ли какой то способ...

215
Как применить preg_replace с учетом кодировки utf8

Как применить preg_replace с учетом кодировки utf8

Ребята, возможно не особо удачно составил оглавление вопроса, но суть заключается в следующем:

252
Перехватить данные из поля и выполнить скрипт

Перехватить данные из поля и выполнить скрипт

Ситуация такая: есть сайт на wordpress с плагином leadsВ нём есть множество форм

216