2013-03-20 12 views
5

Ho due matrici che si presenta come:Restituisci solo valori di matrice che si tratta di chiavi sono in un altro array

$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 
); 

C'è una funzione built-in PHP che consente di recuperare una matrice riempita solo con le chiavi specificate in $fields serie (id, name, city, birthday, money)?

Il ritorno mi aspetto è questo:

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

P.S .: Sto cercando solo una funzione built-in.

+0

non esiste alcuna funzione incorporata come u cercando ... devi usare sia il ciclo che la funzione 'built-in for key'. –

+0

Altri duplicati: http://stackoverflow.com/q/2755304/218196, http://stackoverflow.com/q/4780861/218196, http://stackoverflow.com/q/11265133/218196 ... elenco completo : http://stackoverflow.com/search?q=array_intersect_key+is%3Aanswer. –

risposta

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

Se le chiavi devono sempre essere restituite nell'ordine di $fields, utilizzare un semplice foreach ciclo invece:

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

Il mio array reale ha valori float, quindi la funzione array_flip genera il seguente errore: "Può capovolgere solo i valori STRING e INTEGER!" – fonini

+0

@fonini: Nel tuo esempio, l'array '$ fields' non ha valori float. –

+0

@FelixKling Mi spiace per quello – 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

Sono in ritardo per pubblicare la risposta .... –

+0

È ancora necessario capovolgere i campi ... – Baba

+0

@Baba modificato grazie. –

Problemi correlati