2012-01-12 89 views
1

我有一个多维数组,看起来像这样:PHP:找到一个多维阵列相同的密钥和合并的结果

$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' 
      ) 
     ) 
) 

正如你可以看到,$数组[0]和$阵列[2 ]具有相同的密钥[WS]。我需要一个函数来找到那些“相同的键”。之后我会将这两个数组合并成一个。 f1。

$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' 
         ) 
       ) 
     ) 
    ) 

希望你们明白我的问题。 迎接

+2

为什么不只是迭代它并重建你的数组?一次传递和某种键查找数组应该覆盖它。 – JohnP 2012-01-12 17:51:30

回答

8
function group_by_key ($array) { 
    $result = array(); 
    foreach ($array as $sub) { 
    foreach ($sub as $k => $v) { 
     $result[$k][] = $v; 
    } 
    } 
    return $result; 
} 

See it working

+0

谢谢。它对我来说是一个很好的解决方案。易于理解和运作良好。 – SnowBallz 2012-01-12 20:05:12

1

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

$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]); 
     } 
    } 
1

你可以简单地消除你的数组的第一个水平,你最终会喜欢的东西这个:

$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(); 
+1

thx很多:)你的数组结构已经导致我解决了我的问题。我对构建阵列的想法并不复杂。 – SnowBallz 2012-01-12 20:03:53

相关问题