【问题标题】:Merge two arrays by key but mantain the key of the first in PHP, array_combine fails通过键合并两个数组但在PHP中保持第一个的键,array_combine失败
【发布时间】:2011-09-30 10:34:13
【问题描述】:

我正在尝试合并两个数组,但保留第一个数组的键。

我有这些数据:

$days = array(
    1 => array("name" => "Monday"),
    2 => array("name" => "Tuesday"),
    3 => ...
    30 => array("name" => "Sunday"),
);

还有一个点击:

$clics = array(
    2 => array("clicks" => 4),
    10 => array("clicks" => 2),
);

我想要的数组是:

$final = array(
    1 => array("name" => "Monday"),
    2 => array("name" => "Tuesday", "clicks" => 4),
    3 => ... 
    4 =>
    5 => 
    ...
    10 => array("name" => "Tuesday", "clicks" => 2),
    ..
    30 => array("name" => "Sunday"),
);

如果没有点击,则在第二个数组中,索引不存在。我试过 array_combine 但需要有相同的键,而 array_merge 失败了。

我有什么选择?

提前谢谢你

【问题讨论】:

  • 请写出你想要的数组。因为你的问题不清楚。
  • @stereofrog:如果我能在不使用 foreach 的情况下做到这一点,那就更好了。
  • for/foreach 有什么问题吗?
  • 我认为你应该使用foreach循环,因为这是一个复杂的事情,所以你可以通过使用相同的id来合并它们。

标签: php arrays multidimensional-array


【解决方案1】:

看看 PHP.net 上的 array_merge_recursive 函数。此外,查看那里的 cmets 以查找其中一个函数是否提供了所需的数组(即 comment #104145comment #102379

另外,请注意,通过使用 foreach,您最终肯定会拥有所需的数组。是否有任何您不想要或不能使用 foreach 的具体原因?

【讨论】:

    【解决方案2】:

    如果没有循环,我看不到任何方法可以做到这一点,但是使用循环很容易:

    function merge_your_arrays ($days, $clicks) {
      foreach ($days as $k => $v) {
        if (isset($clicks[$k])) {
          $days[$k] = array_merge($days[$k],$clicks[$k]);
        }
      }
      return $days;
    }
    
    $final = merge_your_arrays($days, $clicks);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多