【问题标题】:PHP merge array by same valuePHP按相同值合并数组
【发布时间】:2013-03-26 17:07:08
【问题描述】:

我有两个大数组,大约有 1000 个键,并且每天都在增长。 如何在array1[]['uid']array2[][7] 中将这些数组按值合并为一个

请注意,正确的值可能是例如 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)

【问题讨论】:

标签: php arrays array-merge


【解决方案1】:
$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

【讨论】:

  • 它不像方面那样工作。添加了 uid 和 login 键但没有值
  • 已修复 -- $array1[$element[7]] 应该是 $array1_inverted[$element[7]]
  • 太棒了! :-) 你有很好的编码技能!我删除了我的答案,因为我看到你的答案好多了。
  • 经过测试$array1_element$array1的索引值。它如何返回$element['uid'] = $array1_element['uid']; 中的任何值。我觉得应该是$element['uid'] = $array1[$array1_element]['uid'];请建议。
  • @SumitRaghav 你是对的,它不像我写的那样工作。我已经更改了第一个循环,以便$array1_inverted 保存子数组而不是索引。我已经对此进行了测试,并且可以正常工作。
【解决方案2】:
foreach($array1 as $value)
{
  foreach($array2 as $value1)
  {
    if($value['uid'] == $value1[7])
  {
     $value1['uid'] = $value['uid'];
     $value1['login'] = $value['login'];
  }
 }
}

尝试一下,我会想一些更好的选择

【讨论】:

  • 查看我对非 Nsquared 实现的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
相关资源
最近更新 更多