【问题标题】:PHP - merge multi-dimensional array based on keysPHP - 基于键合并多维数组
【发布时间】:2014-01-17 00:38:37
【问题描述】:

假设我有一个多维数组:

Array
(
    [0] => Array
        (
            [7,14] => 0.0,3.0
            [5,11] => 0.0,5.0
            [8,6] => 0.0,6.0
        )

    [1] => Array
        (
            [7,14] => 0.0,1.0
            [5,11] => 1.0,3.0
            [11,13] => 1.0,1.0
            [6,8] => 1.0,0.0

        )

我想形成一个新数组,其中键作为每个数组中所有键的联合,值作为这些联合键的对应值。如果仅在一个子数组中找到键,则用逗号填充 would-be 数据

即结果 ----------

Array
(
             [7,14] => 0.0,3.0,0.0,1.0             // <--- union 0.0,3.0 and 0.0,1.0
             [5,11] => 0.0,5.0,1.0,3.0
             [8,6] => 0.0,6.0,,
             [11,3] => 1,0,1.0,,
             [6,8] => 1.0,0.0,,

)

这是我尝试过的。我已经非常接近正确答案了!

function combineValues($bigArray){

$combinedArray = array();

   for($i = 0; $i < (count($bigArray) - 1); $i++) {


      $keys = array_keys($bigArray[$i]);

      for($j = 0; $j < count($keys); $j++){

            $currentKey = $keys[$j];

        if (isset($bigArray[$i+1][$currentKey]){
            $combinedArray[$currentKey] = $bigArray[$i][$currentKey] + "," + $bigArray[$i+1][$currentKey];
        } else {

        }


    }

  }

  return $combinedArray;

}

【问题讨论】:

  • 具有唯一键的值有额外的逗号。重要吗?

标签: php arrays merge


【解决方案1】:

使用foreach 代替for 很容易。

$array2 = [[1, 2, 3, 4], [2 => 7, 8, 9]];
$return_array = array();    
foreach ($array2 as $array1)
    {
    foreach ($array1 as $key => $value)
        {
        if (isset($return_array[$key]))
            $return_array[$key].=',' . $value;
        else
            $return_array[$key] = $value;
        }
    }

var_dump($return_array);

您还可以使用语言的功能特性。 array_walk_recursive

$array2 = [[1, 2, 3, 4], [2 => 7, 8, 9]];

$return_array = array();

array_walk_recursive($array2, function ($value, $key)use(&$return_array)
        {
        if (isset($return_array[$key]))
            $return_array[$key].=',' . $value;
        else
            $return_array[$key] = $value;
        });

var_dump($return_array);

【讨论】:

  • 这太棒了!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
相关资源
最近更新 更多