2013-03-20 3 views
5

J'ai deux tableaux qui ressemble à:Afficher uniquement les valeurs du tableau qui c'est les clés sont dans un autre tableau

$fields = array('id', 'name', 'city', 'birthday', 'money'); 

$values = array('id' => 10,  
    'name' => 'Jonnas', 
    'anotherField' => 'test', 
    'field2' => 'aaa', 
    'city' => 'Marau', 
    'field3' => 'bbb', 
    'birthday' => '0000-00-00', 
    'money' => 10.95 
); 

est-il une PHP fonction intégrée qui récupère un tableau rempli uniquement avec les touches indiquées sur la matrice $fields(id, name, city, birthday, money)?

Le retour, je pense est ceci:

$values2 = array(
    'id' => 10, 
    'name' => 'Jonnas', 
    'city' => 'Marau', 
    'birthday' => '0000-00-00', 
    'money' => 10.95 
); 

P.S .: Je suis à la recherche d'une seule fonction intégrée.

+0

il n'y a pas de fonction intégrée comme u Vous cherchez ... vous devez utiliser à la fois la boucle et la fonction intégrée pour la clé. –

+0

Plus de doublons: http://stackoverflow.com/q/2755304/218196, http://stackoverflow.com/q/4780861/218196, http://stackoverflow.com/q/11265133/218196 ... liste complète : http://stackoverflow.com/search?q=array_intersect_key+is%3Aanswer. –

Répondre

13
$values2 = array_intersect_key($values, array_flip($fields)); 

Si les clés doivent toujours être retournés dans l'ordre de $fields, utiliser une simple boucle foreach à la place:

$values2 = array(); 
foreach ($fields as $field) { 
    $values2[$field] = $values[$field]; 
} 
+0

Mon tableau réel a des valeurs flottantes, donc la fonction array_flip déclenche l'erreur suivante: "Ne peut retourner que les valeurs STRING et INTEGER!" – fonini

+0

@fonini: Dans votre exemple, le tableau '$ fields' n'a pas de valeurs flottantes. –

+0

@FelixKling Désolé à ce sujet – fonini

2

array_intersect_key — Computes the intersection of arrays using keys for comparison

<?php 
$fields = array('id', 'name', 'city', 'birthday'); 

$values = array('id' => 10,  
    'name' => 'Jonnas', 
    'anotherField' => 'test', 
    'field2' => 'aaa', 
    'city' => 'Marau', 
    'field3' => 'bbb', 
    'birthday' => '0000-00-00' 
); 

var_dump(array_intersect_key($fields, array_flip($values))); 
?> 
+0

Je suis un peu en retard pour poster la réponse .... –

+0

Vous avez encore besoin de retourner les champs ... – Baba

+0

@Baba édité merci. –

Questions connexes