2012-08-07 62 views
0

我現在覺得真的很愚蠢,因爲我可以記得做這樣的事情。但現在我的頭是空的,這看起來似乎是一個問題。我有兩個數組。第一:通過匹配兩個陣列來分配值

array (
    0 => 
    array (
    'id' => '1', 
    'name' => 'Blizzard', 
    'slug' => 'blizzard', 
), 
    1 => 
    array (
    'id' => '2', 
    'name' => 'Id Software', 
    'slug' => 'id-software', 
), 
    2 => 
    array (
    'id' => '3', 
    'name' => 'Capcom', 
    'slug' => 'capcom', 
), 
    3 => 
    array (
    'id' => '4', 
    'name' => 'Maxis', 
    'slug' => 'maxis', 
), 
    4 => 
    array (
    'id' => '5', 
    'name' => 'Electronic Arts', 
    'slug' => 'electronic-arts', 
), 
) 

而且謝勝利之一:

array (
    0 => '3', 
    1 => '4', 
) 

我想要做的是,採取從謝勝利陣列值,並與第一個的值相匹配。我怎樣才能做到這一點?

+0

你的意思是你想'$ array1 [$ array2 [0]]'?或者將它匹配到數組1中其中一個元素的'id'? – Matt 2012-08-07 13:28:10

+0

你是什麼意思「匹配它的第一個值」 – 2012-08-07 13:41:55

回答

1

當你說「按價值」,我假設你通過id值意味着,在這種情況下,如果你已經知道id值比少的關鍵之一,你可以這樣做:

foreach($second as $id) { 
    $key = $id - 1; 
    $row = $first[ $key ]; 
    echo $row['name']; 
} 

否則,你必須循環/搜索特定的id

foreach($second as $id) { 
    foreach($first as $row) { 
     if($row['id'] == $id) { 
       echo $row['name']; break; 
     } 
    }   
} 

然而,另一種技巧可以用來只得到一個數組CON泰寧你想要的元素是用array_filter(),像這樣:

$second = array(3, 4); 
$keep = array_filter($first, function($el) use($second) { 
    return in_array($el['id'], $second); 
}); 

現在$keep將包含你希望兩個值的數組,你可以遍歷他們相應。

+0

你的secound解決方案效果很好。我可以清楚地記得幾個月前做了類似的事情,好吧......很簡短;)感謝一堆! – 2012-08-07 13:55:43

0

像這樣的東西?

$new_array = array(); 
foreach ($secoundarray as $key => $value) { 
    $new_array[$key] = $firstarray[$value]; 
}