Trier un array par une partie de chaque entrée

Résolu
DrewDrew Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
DrewDrew Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Alors tout d'abord je prends les albums photo qui ce trouent sur le serveur avec un "scandir"

Disons que le php me donne ceci:

<?php
$album[0] = "Jochri (2013-05-10)";
$album[1] = "Vanderhasselt (01-06-2013)";
$album[2] = "Jochri (2013-05-09)";
$album[3] = "Verbrande Brug (2013-06-30)";
$album[4] = "Ter Wilgen (2013-04-13)";
$album[5] = "Jochri (2013-05-12)";
?>

J'aimerai donc classer les albums (array) par les dates qui ce trouvent entre parenthèses. J'aimerai bien pouvoir les classer en gardant le format de date DD-MM-YYYY. J'ai déjà essayé de tout. En utilisant la fonction explode( '(', $album) et puis d'essayer de classer mais ca ne fonctionnais pas. C'est pour ca que j'ai essayé avec le format YYYY-MM-DD pour pouvoir le classer alfabetiquement.

Y'a-t-il quelqu'un qui peut m'aider? :-)

Merci d'avance

1 réponse

ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
Si tu veux utiliser explode() sur un tableau tu peux passer par array_map()
Pourquoi tu récupère pas ces données dans un tableaux a 2 dimensions dés le départ ? Cela serait plus simple pour la suite ...
1
DrewDrew Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Je ne suis qu'un amateur du php :) Peut être pourrai-tu m'expliquer? :)
0
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
Bah déjà si tu regarde la doc ça te donnera une idée : https://www.php.net/manual/fr/function.array-map.php

Sinon, le principe c'est d'appliquer à chaque ligne de ton tableau une fonction :


$func = function($value)
{
    return explode('(',$value);
};

var_dump(array_map($func,$album));


Faudra que ta fonction soit un peu plus compliquée, mais c'est un départ.
0
DrewDrew Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Et comment je peux récupérer les données dans un tableau deux dimensions des le départ?
0
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
Je ne sais pas comment sont récupérées tes données alors je peux pas te dire pour les récupérer dés le départ mais sinon, y'a pas mal de truc sur le site de php pour la fonction "sort" classement de tableaux : https://www.php.net/manual/fr/function.sort.php

pour avoir ton tableaux en deux dimension :


<?php 
$album[0] = "Jochri (10-05-2013)";
$album[1] = "Vanderhasselt (01-06-2013)";
$album[2] = "Jochri (09-05-2013)";
$album[3] = "Verbrande Brug (30-06-2013)";
$album[4] = "Ter Wilgen (13-04-2013)";
$album[5] = "Jochri (12-05-2013)";

$func = function($value)
{
    return str_replace(')','',explode('(',$value));
};

$album = array_map($func,$album);

echo '<table>';
echo '<tr><th> Val0 </th><th> Val1 </th></tr>';
foreach ($album as $value) {
    echo '<tr><td>'. $value[0] . '</td><td>'. $value[1] .'</td></tr>';
}
echo '</table>';
?>





mais après j'ai arrêté :p

J'espère que ça t'aidera un peu.
0
ryko1820 Messages postés 1677 Date d'inscription   Statut Membre Dernière intervention   276
 
Hello,

Que ça devienne pas une habitude :-)

Pour le coup le format américain des dates est mieux pour classer ...
Mais rien ne t'empêche maintenant que tu sais faire un array_map de faire une petite fonction qui va te l'arranger au format français ...

J'ai récupérer la fn de classement sur clef choisie pour tableau multidimensionnel sur https://www.php.net/manual/fr/function.sort.php

<?php 
$album[0] = "Jochri (2013-10-05)";
$album[1] = "Vanderhasselt (2013)-06-01)";
$album[2] = "Jochri (2013-05-09)";
$album[3] = "Verbrande Brug (2013-06-30)";
$album[4] = "Ter Wilgen (2013-04-13)";
$album[5] = "Jochri (2013-05-12)";


$func = function($value)
{
    return str_replace(')','',explode('(',$value));
};

$album = array_map($func,$album);

echo '<table>';
echo '<tr><th> Val0 </th><th> Val1 </th></tr>';
foreach ($album as $value) {
    echo '<tr><td>'. $value[0] . '</td><td>'. $value[1] .'</td></tr>';
}
echo '</table>';

function array_sort($array, $on, $order=SORT_ASC)
{
    $new_array = array();
    $sortable_array = array();

    if (count($array) > 0) {
        foreach ($array as $k => $v) {
            if (is_array($v)) {
                foreach ($v as $k2 => $v2) {
                    if ($k2 == $on) {
                        $sortable_array[$k] = $v2;
                    }
                }
            } else {
                $sortable_array[$k] = $v;
            }
        }

        switch ($order) {
            case SORT_ASC:
                asort($sortable_array);
            break;
            case SORT_DESC:
                arsort($sortable_array);
            break;
        }

        foreach ($sortable_array as $k => $v) {
            $new_array[$k] = $array[$k];
        }
    }

    return $new_array;
}


$album = array_sort($album, '1', SORT_ASC);

echo '<table>';
echo '<tr><th> Val0 </th><th> Val1 </th></tr>';
foreach ($album as $value) {
    echo '<tr><td>'. $value[0] . '</td><td>'. $value[1] .'</td></tr>';
}
echo '</table>';



?>
0