2011-06-27 9 views
0

J'ai un tableau multidimensionnel dans le format suivant:Rechercher un tableau multidimensionnel pour certaines valeurs

[0] = (
    'id' => '1', 
    'type' => 'fish', 
    'owner' => 'bob', 
) 

[1] = (
    'id' => '2', 
    'type' => 'cat', 
    'owner' => 'mary', 
) 

[2] = (
    'id' => '3', 
    'type' => 'dog', 
    'owner' => 'larry', 
) 

[3] = (
    'id' => '2', 
    'type' => 'cat', 
    'owner' => 'fred', 
) 

Je voudrais rechercher une valeur, et ils renvoient un tableau contenant toutes les clés de les tableaux correspondant et ressemble à ceci sur une recherche de type = chat:

[0] = (
    'id' => '2', 
    'type' => 'cat', 
    'owner' => 'mary', 
) 

[1] = (
    'id' => '2', 
    'type' => 'cat', 
    'owner' => 'fred', 
) 

Je sais que je suis en train de traiter le tableau comme une base de données, mais dans ce cas, il est des données dynamique qui n'a pas besoin d'être stockés Une fois le programme terminé.

Un conseil?

+1

ouais, lui donner un essai ... – amosrivera

+0

@amosrivera Donnez ce essayer? – Drazisil

+0

retenir retenir si vous avez trouvé une réponse. – Neal

Répondre

7

boucle à travers le tableau:

function loopAndFind($array, $index, $search){ 
     $returnArray = array(); 
     foreach($array as $k=>$v){ 
       if($v[$index] == $search){ 
        $returnArray[] = $v; 
       } 
     } 
     return $returnArray; 
} 

//use it: 
$newArray = loopAndFind($oldArray, 'type', 'cat'); 
+0

Cela a fonctionné parfaitement. Merci beaucoup. – Drazisil

+0

@Drazisil, pas de problème^_^à tout moment – Neal

-2

vous devez itérer tableau comme:

foreach ($array as $i => $values) { 
    print "$i {\n"; 
    foreach ($values as $key => $value) { 
     print " $key => $value\n"; 
    } 
    print "}\n"; 
} 

puis vérifier la valeur de clé « type » .... alors enregistrer qui est adapté doit copier à nouveau tableau ...

+0

@Ovais .... je ne suis pas sûr ** ce que ** vous faites ici ... – Neal

+0

Je viens de traversé comme vous l'avez fait dans votre réponse, et ont une description écrite qu'il devrait enregistrer le résultat du match dans le nouveau tableau ... c'est ce que vous avez montré à travers le code. –

-1

Au lieu d'utiliser un index numérique, vous devez utiliser le 'type' comme index.

Votre tableau original ressemble à ceci:

[fish] = Array(0 => Array(
     'id' => '1', 
     'owner' => 'bob', 
    ), 
    1 => Array(
     'id' => '2', 
     'type' => 'cat', 
     'owner' => 'fred', 
    ) 
) 

[cat] = Array(0 => Array(
     'id' => '2', 
     'owner' => 'mary', 
    ) 
) 

[dog] = Array(0 => Array(
     'id' => '3', 
     'owner' => 'larry', 
    ) 
) 

Maintenant, si vous voulez que tous les poissons que vous venez de faire $myArray[ 'fish' ];

+0

Cela peut impliquer un rehashing de code intensif .... – Neal

+0

C'est numérique parce que c'est un tableau. Si je devais suivre votre chemin, j'aurais un tableau pour chaque type, ce qui me permettrait de vérifier si le tableau existe avant de l'utiliser car je ne sais pas quels types j'ai. En outre, j'ai aussi des enregistrements où le type est vide. – Drazisil

Questions connexes