2013-10-28 34 views
1

我有2個數組,我已成爲一個關聯數組。我也有冠軍位置的組合=即'1,2','2,3','1,3'。我需要做的是用球衣號碼替換位置編號,並將它們放回與編寫組合相同的配置中。舉例來說,我已經設置了我的球衣,位置,組合和關聯數組:關聯數組的地方

$jersey = array('3','1','5','4'); 
$position = array('1','2','3','4'); 
$AssocArr = array_combine($position, $jersey); 
$Combo = array('1,2','2,3','1,3'); 

我已經建立了一個功能,從鍵獲取值:

function getVals($finishPosMap, $keys) { 
    foreach($keys as $key) { 
     $output[] = $finishPosMap[$key]; 
    } 
    return $output; 
} 

的一部分我遇到的問題是將它們放回數組中,而不是鍵的值。這是我迄今所做的:

foreach($Combo as $set=>$pCombo) { 
$com = array($set=>(explode(',', $pCombo))); 
    foreach($com as $set=>$com){ 
    $c = getVals($AssocArr, $com); 
    print_r($c); 
    } 
} 

的print_r給我:

array([0] => 3 [1] => 1) 
array([0] => 1 [1] => 5) 
array([0] => 3 [1] => 5) 

誰能幫我把它的格式爲:

array(0 => '3,1', 1 => '1,5', 2 => '3,5'); 

預先感謝您幫助,並請讓我知道如果你認爲會有更好的方式來做到這一點。謝謝!

回答

0

我想你錯過的是array_intersect_key();這應該這樣做:

$jersey = array('3','1','5','4'); 
$position = array('1','2','3','4'); 
$AssocArr = array_combine($position, $jersey); 
$Combo = array('1,2','2,3','1,3'); 

foreach ($Combo as &$value) { 
    $values = explode(',', $value, 2); 
    $new_values = array_intersect_key($AssocArr, array_flip($values)); 
    $value = join(',', $new_values); 
} 

print_r($Combo); 

它更新$Combo陣列就地和每個值,計算出與你的關聯數組的交集。

Demo

+0

非常感謝!我對array_intersect_key會做什麼有一個完全不同的想法。再次感謝! – Kozbot