Problem mit Sortierung/Gruppierung von xml-Einträgen

rernanded

Erfahrenes Mitglied
Hallo,
hier mein Code :
PHP:
<?php

$users = [];
foreach ($xml->user as $user) {
    if ($user['status'] == 'allowed') {
        $users[] = [
            'timestamp' => $user['timestamp'],
            'number' => $user['number'],
            'name' => $user['name'],
            'headline' => $user['headline'],
            'text' => $user['text']
        ];
    }
}


usort($users, function($a, $b) {
    if ($a['timestamp'] === $b['timestamp']) {
        return strcmp($a['number'], $b['number']);
    }
    return strtotime($b['timestamp']) - strtotime($a['timestamp']);
});


$groupedUsers = [];
foreach ($users as $user) {
    $number = $user['number'];
    if (!isset($groupedUsers[$number])) {
        $groupedUsers[$number] = [];
    }
    $groupedUsers[$number][] = $user;
}


foreach ($groupedUsers as $number => $group) {
    echo "<h3>Number {$number}</h3>";
    foreach ($group as $user) {
        echo "<li>{$user['name']} - {$user['headline']} - {$user['text']}</li>";
    }
}
?>



<users><user name="moni" number="109" headline="ich bin das" text="balla balla bullu" status="allowed" timestamp="2025-05-31 13:32:10"/></users>



Die Einträge sollen gruppiert ausgegeben werden, am besten mit einer <hr> o.ä. voneinander getrennt und zwar nach 1.) number und 2.) timestamp.



Gruss MONI
 
Zuletzt bearbeitet:
Ja $user['number'] kann mehrfach identisch sein. Ebenso $user['timestamp'] was aber unwahrscheinlicher ist.
$user['number'] ist der wesentliche Bezugspunkt um zu gruppieren.

MONI
 
Hallo Moni,
ich habe das mal getestet und ich kam an die Werte der Attribute nur heran, wenn ich auf String gecastet habe. Außerdem habe ich die beiden letzten Schleifen zu einer zusammen gefasst. So funktioniert es bei mir:
Code:
        $xml   = simplexml_load_file('moni.xml');
        $users = [];
        foreach ($xml->user as $user) {
            if ((string) $user['status'] == 'allowed') {
                $users[] = [
                    'number'    => (string) $user['number'],
                    'name'      => (string) $user['name'],
                    'headline'  => (string) $user['headline'],
                    'text'      => (string) $user['text'],
                    'timestamp' => (string) $user['timestamp'],
                ];
            }
        }

        usort($users, function ($a, $b) {
            if ($a['timestamp'] === $b['timestamp']) {
                return strcmp($a['number'], $b['number']);
            }
            return strtotime($b['timestamp']) - strtotime($a['timestamp']);
        });

        var_dump($users);
        $number = '';
        foreach ($users as $user) {
            $numberNew = $user['number'];
            if ($numberNew != $number) {
                $number = $numberNew;
                echo "<h3>Number {$number}</h3>";
            }
            echo "<p class=\"userdata\"> {$user['name']} - {$user['headline']} - {$user['text']}</p>";
        }
 

Neue Beiträge

Zurück