2014-10-08 120 views
0

我有一个数组像下面我想使用相同的按键合并在多维数组相同的键在PHP

Array 
(
    [charts_group_name] => all hosts 
    [hosts] => Array 
    (
     [0] => Array 
     (
      [Redmine] => CPU load 
     ) 
     [1] => Array 
     (
      [Redmine] =>CPU utilization 
     ) 
     [2] => Array 
     (
      [test123] => Kernel Process Creations 
     ) 
     [3] => Array 
     (
      [test123] => Memory used 
     ) 
    ) 
) 

合并数组,但我想象下面,我的意思是我要合并的钥匙同名像管理平台,test123 ..

Array 
(
    [charts_group_name] => all hosts 
    [hosts] => Array 
    (
     [0] => Array 
     (
      [Redmine] =>Array 
      (
       [0] => CPU load 
       [1] =>CPU utilization 
      ) 
     ) 
     [1] => Array 
     (
      [test123] => Array 
      (
       [0] =>Memory used 
       [1] =>Number of threads 
      ) 
     ) 
    ) 
) 

我想这code..but我没有得到答案

foreach($multiplehostconfigarray as $item) { 
    foreach($item as $it) { 
     $serv = key($item); 
     $host = current($item); 
     if(!isset($result[$serv ])) { 
      $result[$artist] = array(); 
     } 
     print_r($result[$serv][] = $host); 
    } ` 
} 

回答

0
$mArray = array(
    'charts_group_name' => 'all hosts', 
    'hosts' => array (
     array('Redmine' => 'CPU Load'), 
     array('Redmine' => 'CPU utilization'), 
     array('test123' => 'Kernel process..'), 
     array('test123' => 'Memory used') 
    ) 
); 

print_r($mArray); 

$newArray = $mArray; 
$newArray['hosts'] = array(); 

foreach($mArray['hosts'] as $currentHost) { 
    foreach($currentHost as $hostKey => $hostValue) { 
     $newArray['hosts'][$hostKey][] = $hostValue; 
    } 
} 

print_r($newArray); 

的,其结果是:

Array 
(
    [charts_group_name] => all hosts 
    [hosts] => Array 
     (
      [0] => Array 
       (
        [Redmine] => CPU Load 
       ) 
      [1] => Array 
       (
        [Redmine] => CPU utilization 
       ) 
      [2] => Array 
       (
        [test123] => Kernel process.. 
       ) 
      [3] => Array 
       (
        [test123] => Memory used 
       ) 
     ) 
) 
Array 
(
    [charts_group_name] => all hosts 
    [hosts] => Array 
     (
      [Redmine] => Array 
       (
        [0] => CPU Load 
        [1] => CPU utilization 
       ) 
      [test123] => Array 
       (
        [0] => Kernel process.. 
        [1] => Memory used 
       ) 
     ) 
) 

如果必须有阵列内Redminetest123自理,那么你应该先检查是否他们已经hosts子阵中存在。您可以使用递归函数(如that one)来完成此操作。

0
<?php 
$multiplehostconfigarray = array(
    'charts_group_name' => 'all hosts', 
    'hosts' => array(
        array('Redmine' => 'CPU load'), 
        array('Redmine' => 'CPU utilization'), 
        array('test123' => 'Kernel Process Creations'), 
        array('test123' => 'Memory used') 
       ) 

    ); 


$array = array(); 
foreach($multiplehostconfigarray['hosts'] as $item) 
{ 
     $array[key($item)][] = current($item); 
} 

$multiplehostconfigarray['hosts'] = $array; 
echo '<pre>'; 
print_r($multiplehostconfigarray); 
0

试试这个:

<?php 
$arr = array(
    'charts_group_name' => 'all hosts', 
    'hosts' => array (
     array('Redmine' => 'CPU load'), 
     array('Redmine' => 'CPU utilization'), 
     array('test123' => 'Kernel Process Creations'), 
     array('test123' => 'Memory used'), 
    ) 
); 

$newArr = array_map(function($v) { 
         return is_array($v) 
           ? call_user_func_array('array_merge_recursive', $v) 
           : $v; 
        }, 
        $arr); 
print_r($newArr); 

输出是:

Array 
(
    [charts_group_name] => all hosts 
    [hosts] => Array 
     (
      [Redmine] => Array 
       (
        [0] => CPU load 
        [1] => CPU utilization 
       ) 

      [test123] => Array 
       (
        [0] => Kernel Process Creations 
        [1] => Memory used 
       ) 

     ) 

)