【问题标题】:PHP: find same keys in a multidimensional-array and merge the findingsPHP:在多维数组中找到相同的键并合并结果
【发布时间】:2012-01-12 17:44:59
【问题描述】:

我有一个看起来像这样的多维数组:

$array = (
    [0] => array (
        ['WS'] => array(
             [id] => 2,
             [name] => 'hello'
             )
        )
    ), 
    [1] => array (
        ['SS'] => array(
             [id] => 1,
             [name] => 'hello2'
             )
        )
    ),
    [2] => array (
        ['WS'] => array(
             [id] => 5,
             [name] => 'helloAGAIN'
             )
        )
)

如您所见,$array[0] 和 $array[2] 具有相同的键 [WS]。我需要一个函数来找到那些“相同的键”。之后,我会将这两个数组合并为一个。 f.e.

$array =
(
    [0] => array 
        (
            ['WS'] => array
                (
                     [0] => array
                         (
                             [id] => 2,
                             [name] => 'hello'
                         ),
                     [1] => array
                         (
                            [id] => 5,
                            [name] => 'helloAGAIN'
                         )
                )
        ),
    [1] => array 
         (
             ['SS'] => array
                 (
                     [0] => array
                         (
                              [id] => 1,
                              [name] => 'hello2'
                         )
                 )
         )
    )

希望你们能理解我的问题。 问候

【问题讨论】:

  • 为什么不迭代它并重建你的数组呢?一次通过,某种键查找数组应该覆盖它。

标签: php multidimensional-array


【解决方案1】:
function group_by_key ($array) {
  $result = array();
  foreach ($array as $sub) {
    foreach ($sub as $k => $v) {
      $result[$k][] = $v;
    }
  }
  return $result;
}

See it working

【讨论】:

  • 谢谢。它对我来说是一个很好的解决方案。易于理解且运行良好。
【解决方案2】:

你可以遍历数组并删除匹配的元素

    $multiArray = array('0' => etc etc);
    $matches = array();

    foreach(multiArray as $key => $val)
    {
       $keyValToCheck = key($val);

       if(!in_array($keyValToCheck, $matches))
       {
          $matches[] = $keyValToCheck; // add value to array matches

          // remove item from array because match has been found
          unset($multiArray[$key][$keyValToCheck]);
       }
    }

【讨论】:

    【解决方案3】:

    您可以简单地消除数组的第一级,最终会得到如下结果:

    $array = (
        ['WS'] => array(
            [0] => array(
                    [id] => 2,
                    [name] => 'hello'
            ),
            [1] => array(
                   [id] => 5,
                   [name] => 'helloAGAIN'
            )
        ),
        ['SS'] => array(
            [0] => array(
                  [id] => 1,
                  [name] => 'hello2'
            )
        )
    )
    

    这样你就可以像这样向你的数组添加东西:

    $array['WS'][] = array();
    

    【讨论】:

    • 非常感谢 :) 您的数组结构使我找到了解决问题的方法。我对构建数组的想法非常复杂。
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2016-09-16
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多