2015-11-24 76 views
3

我收到了XML並將其轉換爲數組以供使用。 當我將它轉換爲數組時,XML進入不可預測的多維度。 已經環顧四周,但找不到合適的解決方案。 另一種方法是簡化轉換後的數組。簡化PHP中的多維數組

我已經轉換爲XML數組在PHP中,結果是這樣的:

Array 
(
    [GetMLCBRes] => Array 
     (
      [0] => Array 
       (
        [Ord] => Array 
         (
          [0] => Array 
           (
            [OrdId] => Array 
             (
              [0] => DP Order ID 
             ) 
           ) 
         ) 
        [ReqInf] => Array 
         (
          [0] => Array 
           (
            [ReqDat] => Array 
             (
              [0] => Date of Request 
             ) 
           ) 
         ) 
        [Res] => Array 
         (
          [0] => PDF Report 
         ) 
       ) 
     ) 
) 

我想知道如何刪除,如指數[0],但仍然assoc命令鍵,如[奧德] ,[OrdId],[ReqInf]和[Res]等。

如何將它轉換成這樣?

Array 
(
    [GetMLCBRes] => Array 
     (
      [Ord] => Array 
       (
        [OrdId] => DP Order ID 
       ) 
      [ReqInf] => Array 
       (
        [ReqDat] => Date of Request 
       ) 
      [Res] => PDF Report 
     ) 
) 

謝謝。

回答

0

這應該按預期工作:

function recursive_skip(array $ary) { 
    foreach($ary as $k => &$v) { 
     if (is_array($v)) { 
      // Skip it 
      $v = $v[0]; 
     } 
     if (is_array($v)) { 
      // If current array item is an array itself, recursively call the function on it 
      $v = recursive_skip($v); 
     } 
    } 

    // Return updated array to calling context 
    return $ary; 

} 

$source = Array(
    'GetMLCBRes' => Array(Array(
     'Ord' => Array(Array(
         'OrdId' => Array('DP Order ID') 
     )), 
     'ReqInf' => Array(Array(
         'ReqDat' => Array('Date of Request') 
     )), 
     'Res' => Array('PDF Report') 
    )) 
); 

$dest = recursive_skip($source); 
var_dump($dest); 

幾個注意事項:該功能只跳過每次一個陣列級別(但可以適應,如果需要處理更多),並可能配有顯著性能成本如果你的源數組由於是遞歸的(O(n))而是巨大的,它只是遍歷整個數組樹。

1

它的作品,但如果你改變你的結構,也許它不會。這不是太優化:)

$input = Array(
    'GetMLCBRes' => Array(Array(
     'Ord' => Array(Array(
         'OrdId' => Array('DP Order ID') 
     )), 
     'ReqInf' => Array(Array(
         'ReqDat' => Array('Date of Request') 
     )), 
     'Res' => Array('PDF Report') 
    )) 
); 

foreach($input as &$in){ 
    $sub = $in[0]; 
    foreach($sub as $key => &$value){ 
     $sub2 = $value[0]; 
     if(!is_array($sub2)){ 
      $sub[$key] = $sub2; 
      continue; 
     } 
     $final2 = array(); 
     foreach($sub2 as $key2 => $final) 
      $final2[$key2] = $final[0]; 
     $sub[$key] = $final2; 
    } 
    $in = $sub; 
} 

var_dump($input); 

你可以在這裏進行測試:http://sandbox.onlinephpfunctions.com/code/a6770c7649d7d277aa1dc3544093cc87bed0951d

+0

你的功能運作良好,該樣品陣列。但它不適用於更深的層面。你能幫助修改腳本以遞歸方式運行嗎?謝謝。 – user915218