Trier un array par une partie de chaque entrée

Résolu/Fermé
DrewDrew Messages postés 7 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 11 janvier 2014 - 11 janv. 2014 à 20:40
DrewDrew Messages postés 7 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 11 janvier 2014 - 11 janv. 2014 à 23:28
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 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
11 janv. 2014 à 22:19
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 mercredi 31 octobre 2012 Statut Membre Dernière intervention 11 janvier 2014
11 janv. 2014 à 22:23
Je ne suis qu'un amateur du php :) Peut être pourrai-tu m'expliquer? :)
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 11/01/2014 à 22:30
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 mercredi 31 octobre 2012 Statut Membre Dernière intervention 11 janvier 2014
11 janv. 2014 à 22:45
Et comment je peux récupérer les données dans un tableau deux dimensions des le départ?
0
ryko1820 Messages postés 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 11/01/2014 à 22:55
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 1645 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
11 janv. 2014 à 23:05
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