комплексный usort из нескольких массивов foreach в php - PullRequest
0 голосов
/ 08 октября 2018

У меня есть 5 различных вызовов базы данных для сбора данных от пользователей:

$stmt=$db->prepare('SELECT members.email, sites.username, sites.time, sites.id, sites.url, sites.title
                    FROM sites
                    LEFT JOIN members
                    ON members.username=sites.username
                    LEFT JOIN list_friends 
                    ON
                    (CASE
                     WHEN friend1 = :username THEN friend2
                     WHEN friend2 = :username THEN friend1
                    END) = sites.username
                    WHERE sites.username=:username
                    OR (list_friends.friend1 <> :username)
                    OR (list_friends.friend2 <> :username)
                    ORDER BY sites.time ASC');
$stmt->bindParam(':username', $username);
$stmt->execute();
$row2 = $stmt->fetchAll();

Каждый вызов базы данных является уникальной переменной fetchAll: $ row, $ row1, $ row2 и т. Д.

Затем я создаю 5 различных массивов на основе этих данных.

foreach( $row2 AS $sites_table ) {
    $data[] = array(
        'type' => 'sites',
        'id' => $sites_table["id"],
        'time' => $sites_table["time"],
        'site' => $sites_table["url"],
        'title' => $sites_table["title"],
        'username' => $sites_table["username"],
        'email' => $sites_table["email"]
    );
}

У меня есть функция сравнения

function cmp($a, $b)  {
    $ad = new DateTime($a['time']);
    $bd = new DateTime($b['time']);

    if ($ad == $bd) {
        return 0;
    }

    return $ad < $bd ? -1 : 1;
}

И, наконец, я делаю сортировку на основе этого сравнения.

if (isset($data) && $data !== NULL) {
    usort($data, "cmp");
    for($i=(count($data)-1)-($feed-1);$i>=(0);$i--){
        if ($i >= 0) {
            // echo out result of arrays
        }
    }
}

Моя конечная цель состоит в том, чтобы все отображаемые данные были отсортированы по данным ['time'], причем самые последние данные ['time'] всегда отображались вверху, а затем следующие последние и следующиескоро.

К сожалению, похоже, что сортировка работает только по массиву, по пользователю, а не по всем данным массивов, объединенным для всех пользователей вместе взятых.

, поэтому он отображает вывод, такой как

user1 -> $row1 -> 1 minute ago
user2 -> $row5 -> 30 seconds ago
user1 -> $row2 -> 10 seconds ago
user3 -> $row1 -> 4 minutes ago
user1 -> $row1 -> 2 minutes ago
user2 -> $row1 -> 45 seconds ago
user2 -> $row5 -> 55 seconds ago
etc.

Так, как мне сделать алгоритм сортировки, который показывает последние метки времени по порядку независимо от строки или пользователя

user1 -> $row2 -> 10 seconds ago
user2 -> $row5 -> 30 seconds ago
user2 -> $row1 -> 45 seconds ago
user2 -> $row5 -> 55 seconds ago
user1 -> $row1 -> 1 minute ago
user1 -> $row1 -> 2 minutes ago
user3 -> $row1 -> 4 minutes ago
etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...