2012-02-10 55 views
1

我有與性病對象之前給出以及重新安排多維數組性病類對象

Array 
(
    [0] => abc_Object Object 
     (
      [_api:protected] => zvbj 
      [_values:protected] => Array 
       (
        [count] => 2 
        [data] => Array 
         (
          [0] => abc_Charge Object 
           (
            [_api:protected] => zvbj 
            [_values:protected] => Array 
             (
              [id] => dGoEw 
              [ine] => fKYF0a 
              [xyz] => abc_Object Object 
               (
                [_api:protected] => zvbj 
                [_values:protected] => Array 
                 (
                  [id] => uUmuym 
                  [last] => 4242 
                 ) 
               ) 
             ) 
           ) 
          [1] => abc_Charge Object 
           (
            [_api:protected] => zvbj 
            [_values:protected] => Array 
             (
              [id] => dblvEw 
              [ine] => fKyyu0a 
              [xyz] => abc_Object Object 
               (
                [_api:protected] => z7jj 
                [_values:protected] => Array 
                 (
                  [id] => urtuym 
                  [last] => 4242 
                 ) 
               ) 
             ) 
           ) 
         ) 
       ) 
     ) 
    [1] => abc_Object Object 
     (
      [_api:protected] => zvbj 
      [_values:protected] => Array 
       (
        [count] => 2 
        [data] => Array 
         (
          [0] => abc_Charge Object 
           (
            [_api:protected] => zvbj 
            [_values:protected] => Array 
             (
              [id] => dGoEw 
              [ine] => fKYF0a 
              [xyz] => abc_Object Object 
               (
                [_api:protected] => zvbj 
                [_values:protected] => Array 
                 (
                  [id] => uUmuym 
                  [last] => 4242 
                 ) 
               ) 
             ) 
           ) 
          [1] => abc_Charge Object 
           (
            [_api:protected] => zvbj 
            [_values:protected] => Array 
             (
              [id] => dblvEw 
              [ine] => fKyyu0a 
              [xyz] => abc_Object Object 
               (
                [_api:protected] => z7jj 
                [_values:protected] => Array 
                 (
                  [id] => urtuym 
                  [last] => 4242 
                 ) 
               ) 
             ) 
           ) 
         ) 
       ) 
     )      
) 

我想所有這些組合成一個更簡單的數組作爲

一多維數組
Array(
[0]=>(
     [id] => dGoEw 
     [ine] => fKYF0a 
     [cid] => uUmuym 
    ) 
[1]=>(
     [id] => dblvEw 
     [ine] => fKyyu0a 
     [cid] => urtuym 
    ) 
[2]=>(
     [id] => dGoEw 
     [ine] => fKYF0a 
     [cid] => uUmuym 
    ) 
[3]=>(
     [id] => dblvEw 
     [ine] => fKyyu0a 
     [cid] => urtuym 
    ) 
) 

我已經嘗試了很多foreach循環和東西,但我甚至無法打印數組的第一個值。我不知道我錯過了什麼。

echo $arr['_api:protected']; 

編輯

foreach($arr as $key=>$val) 
     { 
      echo $val['_api:protected']; 
      print_r($val['_values:protected']); 
     } 

沒有輸出從這個甚至

foreach($arr as $key=>$val) 
     { 
      $aaa = $val['_values:protected']['data']; 
      $arr111['id'] = $aaa['_values:protected']['invoice']; 
      $arr111['ine'] = $aaa['_values:protected']['id']; 
      $arr111['cid'] = $aaa['_values:protected']['xyz']['_values:protected']['id']; 
      $arr222[] = $arr111; 
     } 
     print_r($arr222); 

也沒有給我任何的輸出。任何人都可以告訴我我錯過了什麼?

+0

請顯示你已經嘗試過... – DaveRandom 2012-02-10 11:36:54

+0

@DaveRandom請看我的編輯。 – Astha 2012-02-10 11:43:14

+0

你遇到的這個問題是因爲這些值是受保護的,並且你沒有在可訪問的上下文中這樣做。 'abc_Charge'是否擴展了'abc_Object'或反之呢? – DaveRandom 2012-02-10 11:50:42

回答

3

由於您試圖訪問的屬性被定義爲protected,因此除非您處於對象類的上下文中,否則無法訪問它們,或者擴展了對象的類。您在密鑰末尾看到的:protected不屬於名稱的一部分,它告訴您該屬性被定義爲protected。所以密鑰的名稱不是_values:protected,它是_values,它的可見性設置爲protected

這裏有兩個類,應該讓你從一個有效的上下文獲取數據稍微可怕的解決方案:

<?php 

    class simplifier_Object extends abc_Object { 

    public static function getIdFromObj ($obj) { 
     return $obj->_values['id']; 
    } 
    public static function getDataFromObj ($obj) { 
     return $obj->_values['data']; 
    } 

    } 

    class simplifier_Charge extends abc_Charge { 

    public static function getIdFromObj ($obj) { 
     return $obj->_values['id']; 
    } 
    public static function getIneFromObj ($obj) { 
     return $obj->_values['ine']; 
    } 
    public static function getXyzFromObj ($obj) { 
     return $obj->_values['xyz']; 
    } 

    } 

    // Assuming that your input array is held in $arr 

    $result = array(); 
    foreach ($arr as $item) { 
    foreach (simplifier_Object::getDataFromObj($item) as $sub) { 
     $xyz = simplifier_Charge::getXyzFromObj($sub); 
     $result[] = array (
     'id' => simplifier_Charge::getIdFromObj($sub), 
     'ine' => simplifier_Charge::getIneFromObj($sub), 
     'cid' => simplifier_Object::getIdFromObj($xyz) 
    ); 
    } 
    } 

    var_dump($result); 

如果abc_Object延伸abc_Charge(反之亦然),將有可能在包裝這單個類可以擴展子對象,但它仍然不是一個漂亮的解決方案 - 擁有比我更好的面向對象的人可能會有更好的想法。

作爲一個方面說明,您應該在開發時在腳本的頂部有error_reporting(E_ALL); ini_set('display_errors', 1);。如果你有,你會看到許多錯誤消息與你上面的代碼示例給你一個線索是什麼問題。

+0

非常感謝。是的,有類,他們有反之亦然的方法。我花時間瞭解你想告訴我什麼。但是,現在我完成了再次感謝。實現此功能的非常美麗的方式。 – Astha 2012-02-10 12:45:28