2013-03-26 135 views
3

我有两个大数组,每个数字大约有1000个,每天都在增长。 我怎么能在array1[]['uid']array2[][7]PHP合并数组的值相同

合并这个数组合并为一个由值请注意,正确的值可以是例如array1[45]['uid']array2[155][7]array1[444]['uid']array2[666][7]

array1 
    0 => 
    array 
     'login' => string '104' (length=5) 
     'uid' => string '1363861889.100' (length=14) 
    1 => 
    array 
     'login' => string '131' (length=5) 
     'uid' => string '1363863722.126' (length=14) 
    etc... 

,另一个

array2 
    0 => 
    array 
     0 => string '2013' (length=4) 
     1 => string '03' (length=2) 
     2 => string '25' (length=2) 
     3 => string '15' (length=2) 
     4 => string '39' (length=2) 
     5 => string '49' (length=2) 
     6 => string 'anonymous' (length=9) 
     7 => string '1363863722.126' (length=19) 
    1 => 
    array 
     0 => string '2013' (length=4) 
     1 => string '03' (length=2) 
     2 => string '25' (length=2) 
     3 => string '12' (length=2) 
     4 => string '39' (length=2) 
     5 => string '42' (length=2) 
     6 => string 'anonymous' (length=9) 
     7 => string '1363861889.100' (length=19) 
    etc... 

array1[0]['uid']这里的值相同array2[1][7] 我希望得到:

array 
     0 => string '2013' (length=4) 
     1 => string '03' (length=2) 
     2 => string '25' (length=2) 
     3 => string '12' (length=2) 
     4 => string '39' (length=2) 
     5 => string '42' (length=2) 
     6 => string 'anonymous' (length=9) 
     7 => string '1363861889.100' (length=19) 
     'login' => string '104' (length=5) 
     'uid' => string '1363861889.100' (length=14) 
+0

这个http://www.php.net/manual的/en/function.array-merge-recursive.php? – 2013-03-26 17:13:49

回答

2
$array1_inverted = array(); 
foreach ($array1 as $subarray) { 
    $array1_inverted[$subarray['uid']] = $subarray; 
} 
foreach ($array2 as &$element) { 
    $array1_element = $array1_inverted[$element[7]]; 
    $element['uid'] = $array1_element['uid']; 
    $element['login'] = $array1_element['login']; 
} 

DEMO

+0

它不能正常工作。键uid和登录被添加,但没有值 – bestprogrammerintheworld 2013-03-26 18:10:54

+0

固定 - '$ array1 [$ element [7]]'应该是'$ array1_inverted [$ element [7]]''。 – Barmar 2013-03-26 18:12:29

+0

太棒了! :-)你到达那里的好的编码技能!我删除了我的答案,因为我看到你的答案好多了。 – bestprogrammerintheworld 2013-03-26 20:22:20

1
foreach($array1 as $value) 
{ 
    foreach($array2 as $value1) 
    { 
    if($value['uid'] == $value1[7]) 
    { 
    $value1['uid'] = $value['uid']; 
    $value1['login'] = $value['login']; 
    } 
} 
} 

试试看同时我西港岛线认为一些更好的选择

+0

请参阅我的答案,了解非Nsquared实现。 – Barmar 2013-03-26 17:15:04