2011-09-13 3 views
1

J'ai donc essayé de comprendre cela pendant un certain temps maintenant et semble être coincé. J'ai un multidimensionnel et j'essaye de sortir toutes les valeurs avec une certaine clé. Voici le code:Obtenir toutes les valeurs avec une certaine valeur de clé

//My Array: 
$services = array(
       array( service_name => 'facebook', 
        service_title => 'Facebook', 
        service_order => 0, 
        service_type => 'Social Networking' 
        ), 
       array( service_name => 'twitter', 
        service_title => 'Twitter', 
        service_order => 0, 
        service_type => 'Social Networking' 
        ), 
       array( service_name => 'tumblr', 
        service_title => 'MySpace', 
        service_order => 0, 
        service_type => 'Blogging' 
        ) 
); 

Le problème est que je veux sortir les valeurs par service_type par exemple « réseautage social » ou « Blogging » Je suis en mesure de le faire si j'utilise un foreach comme ceci:

foreach($services as $service) { 
    if ($service['service_type'] == 'Social Networking') { 
      echo($service['service_title']); 
    } 
    if ($service['service_type'] == 'Blogging') { 
      echo($service['service_title']); 
    } 
} 

qui fonctionne très bien jusqu'à ce que j'essaie d'ajouter un titre dans les types comme

foreach($services as $service) { 
    if ($service['service_type'] == 'Social Networking') { 
      echo($service['service_title']); 
    } 
    echo ('<h3> Blogging</h3>'); 
    if ($service['service_type'] == 'Blogging') { 
      echo($service['service_title']); 
    } 
} 

J'ai assez appris à connaître c'est à cause de la façon foreach boucles fonctionnent donc j'ai essayé de le faire avec quelque chose comme while($service['service_type'] == 'Social Networking') (qui crée une boucle infinie amusante) et de diverses autres façons.

Idéalement, je veux trier le tableau par service_type, puis afficher les résultats sans avoir à exécuter la boucle foreach entre les en-têtes.

Toute aide sur ce serait génial ou même d'autres suggestions sur les façons de le faire.

Répondre

2

Je pense que vous essayez de faire quelque chose comme ceci:

// Create an array containing all of the distinct "service types" 
// from the $services array 
$service_types = array(); 
foreach ($services as $service) { 
    // If we have not yet encountered this entry's "service type", 
    // then we need to add it to our new array 
    if (!in_array($service['service_type'], $service_types)) { 
     $service_types[] = $service['service_type']; 
    } 
} 
if (count($service_types)) { 
    // For each "service type", we want to echo a header and then 
    // a list of services of that type 
    foreach ($service_types as $current_type) { 
     echo '<h3>'.$current_type.'</h3>'; 
     // Loop through the services and echo those that are 
     // of the correct type 
     foreach ($services as $service) { 
      if ($service['service_type'] == $current_type) { 
       echo($service['service_title']); 
      } 
     } 
    } 
} else { 
    echo '<h3>No services</h3>' 
} 
+0

Merci qui m'a obtenu sur la bonne voie. Je reçois cette erreur si 'Warning: in_array() [fonction.in-array]: Type de données incorrect pour le second argument' Je ne sais pas ce que cela signifie, mais je vais jouer avec un peu. J'aimerais aussi que vous puissiez expliquer le code un peu. Je comprends la plupart mais plus je comprends, mieux c'est. – BandonRandon

+0

_service_type_ doit être cité. '$ service [service_type]' devrait être '$ service ['service_type']' sur les lignes 3 et 4. Aussi, si vous voulez trier par type de service, ajoutez simplement 'sort ($ service_types);' après le premier 'foreach '. – Herbert

+0

J'ai ajouté quelques commentaires. Je ne sais pas pourquoi vous auriez cet avertissement, le code semble correct en un coup d'oeil. – Hammerite

0

Je ne l'ai pas suivi toutes vos questions, mais vous demande si vous pouvez trier le tableau par type de service - afin que vous puissiez construire une user defined sorting function.

function sortByServiceType($a, $b) { 
    // This will sort them by service type alphabetically 
    return strcmp($a['service_type'], $b['service_type']); 
} 

uasort($services, 'sortByServiceType'); 
7

Avec php> 5.5 vous pouvez faire

$myData = array(
    array(
     'service_name' => 'facebook', 
     'service_title' => 'Facebook', 
     'service_order' => 0, 
     'service_type' => 'Social Networking' 
    ), 
    array( 
     'service_name' => 'twitter', 
     'service_title' => 'Twitter', 
     'service_order' => 0, 
     'service_type' => 'Social Networking' 
    ), 
    array(
     'service_name' => 'tumblr', 
     'service_title' => 'MySpace', 
     'service_order' => 0, 
     'service_type' => 'Blogging' 
    ) 
); 

$filtered = array_column($myData, 'service_column'); 

voir: http://www.php.net/manual/en/function.array-column.php

+0

C'est incroyable. Dommage que je _just_ commuté à 5.4 et il faudra un certain temps avant que je puisse utiliser ceci .. :( –

Questions connexes