2013-03-20 8 views
5

Mam dwie tablice, które wygląda następująco:Return tylko wartości tablicowe, które To klucze są w innym tablicy

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

Czy istnieje PHP wbudowaną funkcją, która pobiera tablicę wypełnioną jedynie z kluczami podanymi na $fields tablicy (id, name, city, birthday, money)?

Zwrot Spodziewam to:

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

P.S .: szukam tylko wbudowaną funkcją.

+0

nie ma wbudowaną funkcję jak u szukam ... musisz użyć zarówno pętli, jak i "wbudowanej funkcji klucza". –

+0

Więcej duplikatów: http://stackoverflow.com/q/2755304/218196, http://stackoverflow.com/q/4780861/218196, http://stackoverflow.com/q/11265133/218196 ... pełna lista : http://stackoverflow.com/search?q=array_intersect_key+is%3Aanswer. –

Odpowiedz

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

Jeśli klawisze zawsze musi być zwrócony w kolejności $fields użyć prostego foreach pętlę Zamiast:

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

Moja prawdziwa tablica ma wartości zmiennoprzecinkowe, więc funkcja array_flip wywołuje następujący błąd: "Można odwrócić tylko wartości STRING i INTEGER!" – fonini

+0

@fonini: W twoim przykładzie tablica '$ fields' nie ma wartości zmiennoprzecinkowych. –

+0

@FelixKling Przepraszamy o tym – 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

Jestem trochę spóźniony, aby opublikować odpowiedź ... –

+0

Nadal trzeba odwrócić pola ... – Baba

+0

@Baba edytowane dzięki. –

Powiązane problemy