如何以特定格式合并数组?

时间:2010-12-31 06:48:15

标签: php arrays logic

我有以下数组:

1)总放置

Array
(
[0] => Array
    (
        [centers] => Array
            (
                [name] => delhi
                [id] => 1
            )

        [0] => Array
            (
                [totalplaced] => 8
            )

    )

[1] => Array
    (
        [centers] => Array
            (
                [name] => mumbai
                [id] => 2
            )

        [0] => Array
            (
                [totalplaced] => 1
            )

    )

)

2)总工作

 Array
(
[0] => Array
    (
        [centers] => Array
            (
                [name] => delhi
                [id] => 1
            )

        [0] => Array
            (
                [totalworking] => 4
            )

    )

[1] => Array
    (
        [centers] => Array
            (
                [name] => mumbai
                [id] => 2
            )

        [0] => Array
            (
                [totalworking] => 1
            )

    )

 )

3)经过全面培训

Array
(
[0] => Array
    (
        [centers] => Array
            (
                [name] => delhi
                [id] => 1
            )

        [0] => Array
            (
                [totaltrained] => 8
            )

    )

[1] => Array
    (
        [centers] => Array
            (
                [name] => mumbai
                [id] => 2
            )

        [0] => Array
            (
                [totaltrained] => 1
            )

    )

)

我想合并这些数组,以便结果数组看起来像这样

[newarray] => Array(
[0] => Array (
    [centers] => Array
            (
                [name] => delhi
                [id] => 1
                [totalplaced] => 8
                [totalworking] => 4
                [totaltrained] => 8
             )
  )
[1]=> Array(
   [centers] => Array
            (
                [name] => mumbai
                [id] => 2
                [totalplaced] => 1
                [totalworking] => 1
                [totaltrained] => 1
             )
    )
 )

这是我要显示的上述数据的表格表示

centername      totalplaced    totalworking   totaltrained 
  delhi             8               4             8
  mumbai            1               1             1 

请帮我解决这个问题。

由于

Pankaj Khurana

1 个答案:

答案 0 :(得分:1)

这里的困难是PHP的函数(如array_merge()和array_merge_recursive())不会将数据合并到数字键中,而是会重新键入任何重复的数字键。例如,给定两个数组:

array(
  'test' => 'abc',
  0 => 'xyz'
);

array(
  'test' => 'def',
  0 => 'uvw'
);

将它们与array_merge()合并在一起将生成如下数组:

array(
  'test' => 'def',
  0 => 'xyz',
  1 => 'uvw'
);

因此,无论是字符串还是数字键,您都需要在任何键上使用自定义函数“添加”。试试这个:

function mixed_key_array_merge() {

  $args = func_get_args();

  $result = array();

  foreach ($args as $arg) {

    // discard non-array arguments; maybe this could be better handled
    if (!is_array($arg)) {
      continue;
    }

    foreach ($arg as $key => $value) {

      if (!isset($result[$key])) {
        $result[$key] = $value;
      } else if (is_array($result[$key])) {
        $result[$key] = call_user_func_array('mixed_key_array_merge',array($result[$key],$value));
      }

    }

  }

  return $result;

}