2010-09-27 6 views
1

J'ai un tableau multidimensionnel en ce moment qui ressemble à ceci:Tri et fournir un tableau multidimensionnel

function art_appreciation_feeds() { 
$items = array(
    array('site' => '', 'uri' => '', 'feed' => ''), 
    array('site' => '', 'uri' => '', 'feed' => ''), 
    array('site' => '', 'uri' => '', 'feed' => ''), 
    array('site' => '', 'uri' => '', 'feed' => ''), 
); 
return $items; 
} 

droit, sortie donc je les valeurs du tableau en utilisant cette fonction:

foreach($items as $i => $row) { 

ce que je cherche à faire, est d'ajouter une autre valeur à ce tableau appelé category pour que j'aurais:

array(
    array('site' => '', 'uri' => '', 'feed' => '', 'category' => ''), 
); 

Et quand je suis dans la boucle ci-dessus, pour le sortir dans l'ordre par le champ category avec un <h2>Category</h2> en haut seulement de chaque section.

Est-ce la meilleure façon de le faire et si oui, comment pourrais-je changer ma boucle pour s'adapter à cela? Avertissement: Je peux aussi changer le tableau si vous pensez que quelque chose d'autre est préférable.

Merci!

Répondre

2

Je suis sûr qu'il y a de meilleures façons de faire et je ne sais pas si c'est facile à faire dans votre situation, mais juste une suggestion. Pourquoi ne pas avoir la catégorie en tant que clé de tableau et en insérant tous les enregistrements pertinents à cette catégorie en tant que sous-tableau?

par exemple:

$items['catname1'][] = array('site' => '', 'uri' => '', 'feed' => ''); 
$items['catname2'][] = array('site' => '', 'uri' => '', 'feed' => ''); 
$items['catname1'][] = array('site' => '', 'uri' => '', 'feed' => ''); 

puis tri en fonction de la clé du tableau?

Ou si vous ne voulez pas ajouter cette couche supplémentaire. Ajouter une valeur de compteur à CatName et stocker le catname dans le tableau lui-même comme sous

$items['catname1'.$c] = array('site' => '', 'uri' => '', 'feed' => '', cat=>'catname1'); 
$items['catname2'.$c] = array('site' => '', 'uri' => '', 'feed' => '', cat=>'catname2'); 
$items['catname1'.$c] = array('site' => '', 'uri' => '', 'feed' => '', cat=>'catname1'); 

utilise ksort() vous devriez être en mesure de trier sur la clé du tableau facilement.

0

Une façon est d'utiliser usort(), qui vous permet de spécifier une fonction de tri:

function compareTwoItems($a, $b) 
{ 
    return strcmp($a["category"], $b["category"]); 
} 

usort($items, "compareTwoItems"); 

Une fois usort() est fait, les articles sont triés, avec tous les articles de la même catégorie étant adjacents dans le tableau.

Si vous le souhaitez, vous pouvez continuer à affiner votre fonction compareTwoItems() - par ex. faire sous-tri dans une catégorie:

function compareTwoItems($a, $b) 
{ 
    $strcmp = strcmp($a["category"], $b["category"]); 
    if ($strcmp != 0) 
     return $strcmp; 
    else 
     return strcmp($a["site"], $b["site"]); 
} 
+0

Pas que je sois le downvoter (c'est une solution à mon humble avis), mais ** DO ** citez vos array_keys! (Ou je vais conduire par définition 'define ('category', 'site');' juste pour contrer le code: P) – Wrikken

+0

Bon, j'ai cité les clés du tableau. –

0

Utilisez array_multisort pour trier des tableaux multiples ou multidimensionnels.

http://php.net/manual/en/function.array-multisort.php

On suppose que, vous avez le tableau à plusieurs dimensions suivantes: -

array(
    array('site' => 'some value', 'uri' => 'some value', 'feed' => 'some value', 'category' => 'some value'), 
    array('site' => 'some value', 'uri' => 'some value', 'feed' => 'some value', 'category' => 'some value'), 
    array('site' => 'some value', 'uri' => 'some value', 'feed' => 'some value', 'category' => 'some value'), 
    array('site' => 'some value', 'uri' => 'some value', 'feed' => 'some value', 'category' => 'some value'), 
); 

On suppose, le tableau ci-dessus est stocké dans la variable nommée $ data

// Obtain a list of columns 
foreach ($data as $key => $row) { 
    $category[$key] = $row['category']; 
} 

// Sort the data with category descending 
// Add $data as the last parameter, to sort by the common key 
array_multisort($category, SORT_DESC, $data); 

Espoir CA aide.