Récupérer la plus petite ID d'un foreach.

Fermé
john - 10 avril 2013 à 15:19
 Zasth - 11 avril 2013 à 10:34
Bonjour à tous !
Alors voila j'ai un petit soucis tout bête, j'ai déjà cherché sur google mais sans succès ^^'
Je vous explique, j'ai une base de données dans laquelle il y a une table contenant les informations à récupérer. Cette table contient :
ID
Titre
Description
Image
Categorie

Je récupère toutes les ID où Categorie = $categorie par ordre décroissant et je liste le tout dans un foreach. Maintenant j'aimerais juste récupérer l'ID la plus petite de cette liste. Une idée ?

Merci.

3 réponses

Bionik Messages postés 4234 Date d'inscription jeudi 19 août 2010 Statut Modérateur Dernière intervention 3 août 2016 183
10 avril 2013 à 15:23
Salut,

Tu peux utiliser la fonction MIN de SQL.

$sql = "SELECT MIN(id) FROM ta_table" ;
0
Salut, tout d'abord merci pour ton aide ;) Je viens de tester, mais ça ne me convient pas totalement ;)
j'ai opté pour la fonction min de php, mais vu que j'utilise cela dans un foreach je ne peux pas faire de min(array(r->blabla)); puisque sinon il décrète que chaque ID est la plus petite. Il faudrait donc que je récupère toutes mes ID dans un tableau en dehors du foreach. Tu sais comment faire ?
0
Azraka Messages postés 252 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 5 juin 2014 13
10 avril 2013 à 16:32
Avant ton foreach déclare une variable $min, que tu initialises à 0.

Dans ton foreach tu fais un
if ($tonId < $min) {
    $min = $tonId;
}
Et à la fin du foreach c'est bon, $min contient bien l'id min =)

Sinon si ton id est la clé de ton tableau tu peux aussi faire un
$min = min(array_keys($tontableau));
0
Merci à tous j'ai trouvé la solution, et j'ai oublié de venir répondre ^^'
Alors pour ceux que ça intéresse et qui aurait ce problème, voici la solution :

Faites un premier foreach($rows_o as $r) : dans lequel $id = min(array($r->id));

Puis faite une second foreach comme le premier avec la condition suivante :
if ($r->id == $id) {ce que vous voulez}


au final vous avez :

<?php
foreach($rows_o as $r) :
$id = min(array($r->id));
endforeach;
?>

<?php foreach($rows_o as $r) : ?>
<?php
if ($r->id == $id)
{
echo 'l'id le plus petit';
}

else
{
echo 'les autres id';
}
?>
">

Je vous explique un peu si ça vous intéresse ;)
En gros le foreach est fait pour lister, mais il liste d'une manière particulière, en fait le foreach répète son code pour chaque valeur qu'on lui demande de tester, donc si je faisais tout dans un seul foreach, il commencerait par tester l'id 1 seule, et dirait que c'est la plus petite, puis l'id 2 seule et dirait également que c'est la plus petite (bah oui elle est seule) etc.
Du coup, on séparant cela en deux foreach on peut extraire la plus petite valeur.

Voila c'est assez peu claire comme explication mais c'est le matin ;) Et puis il faut que vous cogitiez un peu pour que ça rentre hein ! :p

Aller bonne chance ;)
Guillaume
0