2014-10-08 44 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 
       ) 

     ) 

)