Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I have two big arrays with around 1000 keys and every day growing. How can I merge this arrays into one by value in array1[]['uid'] and array2[][7]

Please note that correct value could be for example array1[45]['uid'] and array2[155][7] or array1[444]['uid'] and array2[666][7] etc.

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...

and the other one

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'] has the same value herearray2[1][7] I would like get:

 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)
share|improve this question

2 Answers

up vote 2 down vote accepted
$array1_inverted = array();
foreach ($array1 as $index => &$subarray) {
  $array1_inverted[$subarray['uid']] = $index;
}
foreach ($array2 as &$element) {
  $array1_element = $array1_inverted[$element[7]];
  $element['uid'] = $array1_element['uid'];
  $element['login'] = $array1_element['login'];
}
share|improve this answer
It doesn't work as aspected. Keys uid and login are added but with no value – bestprogrammerintheworld Mar 26 at 18:10
Fixed -- $array1[$element[7]] was supposed to be $array1_inverted[$element[7]]. – Barmar Mar 26 at 18:12
Great! :-) Nice coding skills you got there! I deleted my answer because I saw your one was much better. – bestprogrammerintheworld Mar 26 at 20:22
foreach($array1 as $value)
{
  foreach($array2 as $value1)
  {
    if($value['uid'] == $value1[7])
  {
     $value1['uid'] = $value['uid'];
     $value1['login'] = $value['login'];
  }
 }
}

Try it meanwhile I wil think of some better alternative

share|improve this answer
See my answer for a non-Nsquared implementation. – Barmar Mar 26 at 17:15

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.