Afficher 3 premières lignes Array

Emma_
Invité n'ayant pas de compte PHPfrance

28 nov. 2013, 11:53

Bonjour,

j'ai crée une fonction me permettant de récupérer les données nécessaires afin de pouvoir créer un menu par la suite:
<?php
function page($idRubr){
	$db = Base::getConnection();
	$query = $db->query("SELECT * FROM rubrique");

	$menu = array();

	while ($rubrique=$query->fetch(PDO::FETCH_OBJ)){
		
		$menu[$rubrique->idRubrique] = array("nom" => $rubrique->nomRubrique);
	}
		$query = $db->prepare("SELECT * FROM contenu_rubrique WHERE idRubrique = :idRubr");
		$query->bindParam(':idRubr', $idRurb);
		$query->execute();
		$obj = $query->fetch(PDO::FETCH_OBJ);
		
	return array("menu" => $menu, "content" => $obj);
}
?>
Je cherche maintenant à faire en sorte d'afficher uniquement les 3 premières rubriques de mon menu (j'en possède 8 au total).
Je ne peux pas effectuer un LIMIT 0,3 dans la requête de ma fonction précédente car je souhaite réutiliser cette fonction plus tard afin d'afficher les rubriques restantes.

Je dois donc plutôt regarder du coté du foreach et le changer.

Pour le moment j'ai le code suivant:
<?php
	if(isset($_GET['id'])){ 
		$id = $_GET['id'];
	} else {
		$id = -1;
	}
	$page = page($id);
	$menu = $page['menu'];
	$content = $page['content'];
	
        foreach ($menu as $idRubrique=> $objet) {
					
		$nom = $objet['nom'];
		echo '<li>';
		echo '<a href="http://monsite.fr/rubrique/id/'.$idRubrique.'">';
		echo '<br>';
        }
?>
Quelqu'un voit-il comment faire ?

Merci

Mammouth du PHP | 2278 Messages

28 nov. 2013, 14:56

Il y a deux solutions au moins:
modifier la requete :
function z($limite="")
{
$limite = ($limite == "") , "": "LIMIT $limite";
$req= "select ..... $limit";
}
l'autre remplacer foreach par un for ou un while
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Emma_
Invité n'ayant pas de compte PHPfrance

28 nov. 2013, 15:19

J'opterai pour la seconde option, du fait que j'ai besoin de réutiliser ma fonction plus tard pour afficher les rubriques restantes.

Mais étant donné que je début en php, je ne vois pas pour le moment comment transformer mon foreach ($menu as $idRubrique=> $objet) en un simple for.

Si je fais for ($i = 0; $i < n; $i++) { ... } comment est-ce qu'ensuite je peux introduire mon instruction $menu as $idRubrique=> $objet ?

Mammouth du PHP | 2278 Messages

28 nov. 2013, 16:35

tu fais
$ligne = $menu[$i];
tu vérifies s'il y a ce que tu penses par:
print "<br />";
print_r($ligne);
tu extrais par :
$element = $ligne['l'index qui t'intéresse'];
Si tu ne comprends pas, envoie le résultat d'un print_r(); ci-dessus
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 79 Messages

01 déc. 2013, 13:21

Bonjour, admettons que ta requête sql retourne plusieurs résultats avec comme attribues : id, col1, col2.

exemple :

<?php
$dsn = "mysql:dbname=maBdd;host:127.0.0.1;port:3306" ;
$database = new PDO( $dsn, 'root', null );
$sql = "SELECT * FROM table WHERE col1 = ?" ;
$req = $database-> prepare( $sql );
$req-> execute( array( 'nomCol1' ) );
$result = $req-> fetchAll( PDO::FETCH_ASSOC );
?>
<div id="result">
<table>
<thead>
<tr>
<th>id</th>
<th>col1</th>
<th>col2</th>
</tr>
</thead>
<tbody>
<?php for( $i = 0 ; $i < 3 ; $i++ ): ?>
<tr>
<td><?php echo $result[$i]['id'] ?></td>
<td><?php echo $result[$i]['col1'] ?></td>
<td><?php echo $result[$i]['col2'] ?></td>
</tr>
<?php endfor; ?>
</tbody>
</table>
</div>
La boucle for permet de joueur avec le curseur $i. On l'incrémente de 1 pour chaque passage. C'est la seul inconnu du script, il n'est donc pas nécessaire d’exploiter un boucle foreach pour extraire les valeurs de chaque tuple (ligne) de ton résultat de ta requête sql.

Ciao