2013-10-28 29 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