2017-08-05 62 views
0

使用一個API返回一個對象,然後我將其轉換爲要在我的API中使用的數組。但我似乎無法使用名稱上帶有* _的鍵來選擇值。我不知道爲什麼。這裏是陣列的外觀:無法使用其密鑰名上帶有* _的密鑰來選擇數組值

Array 
(
    [*_apiKey] => XXXXXXXXXXXXX 
    [*_values] => Array 
     (
      [carrier] => XXXXXXXXXXXXX 
      [tracking_number] => XXXXXXXXXXXXX 
      [address_from] => Shippo_Object Object 
       (
        [_apiKey:protected] => XXXXXXXXXXXXX 
        [_values:protected] => Array 
         (
          [city] => XXXXXXXXXXXXX 
          [state] => 
          [zip] => XXXXXXXXXXXXX 
          [country] => XXXXXXXXXXXXX 
         ) 

        [_unsavedValues:protected] => Shippo_Util_Set Object 
         (
          [_elts:Shippo_Util_Set:private] => Array 
           (
           ) 

         ) 

        [_transientValues:protected] => Shippo_Util_Set Object 
         (
          [_elts:Shippo_Util_Set:private] => Array 
           (
           ) 

         ) 

        [_retrieveOptions:protected] => Array 
         (
         ) 

       ) 

      [address_to] => Shippo_Object Object 
       (
        [_apiKey:protected] => XXXXXXXXXXXXX 
        [_values:protected] => Array 
         (
          [city] => XXXXXXXXXXXXX 
          [state] => 
          [zip] => XXXXXXXXXXXXX 
          [country] => XXXXXXXXXXXXX 
         ) 

        [_unsavedValues:protected] => Shippo_Util_Set Object 
         (
          [_elts:Shippo_Util_Set:private] => Array 
           (
           ) 

         ) 

        [_transientValues:protected] => Shippo_Util_Set Object 
         (
          [_elts:Shippo_Util_Set:private] => Array 
           (
           ) 

         ) 

        [_retrieveOptions:protected] => Array 
         (
         ) 

       ) 

      [eta] => 
      [servicelevel] => Shippo_Object Object 
       (
        [_apiKey:protected] => XXXXXXXXXXXXX 
        [_values:protected] => Array 
         (
          [token] => 
          [name] => 
         ) 

        [_unsavedValues:protected] => Shippo_Util_Set Object 
         (
          [_elts:Shippo_Util_Set:private] => Array 
           (
           ) 

         ) 

        [_transientValues:protected] => Shippo_Util_Set Object 
         (
          [_elts:Shippo_Util_Set:private] => Array 
           (
           ) 

         ) 

        [_retrieveOptions:protected] => Array 
         (
         ) 

       ) 

      [metadata] => 
      [tracking_status] => Shippo_Object Object 
       (
        [_apiKey:protected] => XXXXXXXXXXXXX 
        [_values:protected] => Array 
         (
          [object_created] => 2017-08-04T23:05:43.651Z 
          [object_updated] => 2017-08-04T23:05:43.651Z 
          [object_id] => XXXXXXXXXXXXX 
          [status] => UNKNOWN (¡¡¡This is what I want to select!!!!) 
          [status_details] => Shipment information received 
          [status_date] => 2017-08-04T06:40:00Z 
          [location] => 
         ) 

        [_unsavedValues:protected] => Shippo_Util_Set Object 
         (
          [_elts:Shippo_Util_Set:private] => Array 
           (
           ) 

         ) 

        [_transientValues:protected] => Shippo_Util_Set Object 
         (
          [_elts:Shippo_Util_Set:private] => Array 
           (
           ) 

         ) 

        [_retrieveOptions:protected] => Array 
         (
         ) 

       ) 

      [tracking_history] => Array 
       (
        [0] => Shippo_Object Object 
         (
          [_apiKey:protected] => XXXXXXXXXXXXX 
          [_values:protected] => Array 
           (
            [object_created] => 2017-08-04T23:05:43.651Z 
            [object_id] => XXXXXXXXXXXXX 
            [status] => UNKNOWN 
            [status_details] => Shipment information received 
            [status_date] => 2017-08-04T06:40:00Z 
            [location] => 
           ) 

          [_unsavedValues:protected] => Shippo_Util_Set Object 
           (
            [_elts:Shippo_Util_Set:private] => Array 
             (
             ) 

           ) 

          [_transientValues:protected] => Shippo_Util_Set Object 
           (
            [_elts:Shippo_Util_Set:private] => Array 
             (
             ) 

           ) 

          [_retrieveOptions:protected] => Array 
           (
           ) 

         ) 

       ) 

      [transaction] => 
      [messages] => Array 
       (
       ) 

     ) 

    [*_unsavedValues] => Shippo_Util_Set Object 
     (
      [_elts:Shippo_Util_Set:private] => Array 
       (
       ) 

     ) 

    [*_transientValues] => Shippo_Util_Set Object 
     (
      [_elts:Shippo_Util_Set:private] => Array 
       (
       ) 

     ) 

    [*_retrieveOptions] => Array 
     (
     ) 

) 

這裏是同一陣列的後續代碼var_dump:

array(5) { 
    ["*_apiKey"]=> 
    string(52) "XXXXXXXXXXXXXXXX" 
    ["*_values"]=> 
    array(11) { 
    ["carrier"]=> 
    string(11) "dhl_express" 
    ["tracking_number"]=> 
    string(10) "XXXXXXXXX" 
    ["address_from"]=> 
    array(5) { 
     ["*_apiKey"]=> 
     string(52) "XXXXXXXXXXXXXXXX" 
     ["*_values"]=> 
     array(4) { 
     ["city"]=> 
     string(9) "xxxxxxxxxxx" 
     ["state"]=> 
     string(0) "" 
     ["zip"]=> 
     string(5) "xxxxx" 
     ["country"]=> 
     string(2) "MX" 
     } 
     ["*_unsavedValues"]=> 
     array(1) { 
     ["Shippo_Util_Set_elts"]=> 
     array(0) { 
     } 
     } 
     ["*_transientValues"]=> 
     array(1) { 
     ["Shippo_Util_Set_elts"]=> 
     array(0) { 
     } 
     } 
     ["*_retrieveOptions"]=> 
     array(0) { 
     } 
    } 
    ["address_to"]=> 
    array(5) { 
     ["*_apiKey"]=> 
     string(52) "XXXXXXXXXXXXXXXX" 
     ["*_values"]=> 
     array(4) { 
     ["city"]=> 
     string(9) "xxxxxxxxx" 
     ["state"]=> 
     string(0) "" 
     ["zip"]=> 
     string(5) "xxxxxxxxx" 
     ["country"]=> 
     string(2) "MX" 
     } 
     ["*_unsavedValues"]=> 
     array(1) { 
     ["Shippo_Util_Set_elts"]=> 
     array(0) { 
     } 
     } 
     ["*_transientValues"]=> 
     array(1) { 
     ["Shippo_Util_Set_elts"]=> 
     array(0) { 
     } 
     } 
     ["*_retrieveOptions"]=> 
     array(0) { 
     } 
    } 
    ["eta"]=> 
    NULL 
    ["servicelevel"]=> 
    array(5) { 
     ["*_apiKey"]=> 
     string(52) "XXXXXXXXXXXXXXXX" 
     ["*_values"]=> 
     array(2) { 
     ["token"]=> 
     NULL 
     ["name"]=> 
     NULL 
     } 
     ["*_unsavedValues"]=> 
     array(1) { 
     ["Shippo_Util_Set_elts"]=> 
     array(0) { 
     } 
     } 
     ["*_transientValues"]=> 
     array(1) { 
     ["Shippo_Util_Set_elts"]=> 
     array(0) { 
     } 
     } 
     ["*_retrieveOptions"]=> 
     array(0) { 
     } 
    } 
    ["metadata"]=> 
    NULL 
    ["tracking_status"]=> 
    array(5) { 
     ["*_apiKey"]=> 
     string(52) "XXXXXXXXXXXXXXXX" 
     ["*_values"]=> 
     array(7) { 
     ["object_created"]=> 
     string(24) "2017-08-07T17:10:41.233Z" 
     ["object_updated"]=> 
     string(24) "2017-08-07T17:10:41.233Z" 
     ["object_id"]=> 
     string(32) "xxxxxxxxxxxxxxxxxxxxxxx" 
     ["status"]=> 
     string(7) "TRANSIT" 
     ["status_details"]=> 
     string(21) "With delivery courier" 
     ["status_date"]=> 
     string(20) "2017-08-07T10:04:14Z" 
     ["location"]=> 
     NULL 
     } 
     ["*_unsavedValues"]=> 
     array(1) { 
     ["Shippo_Util_Set_elts"]=> 
     array(0) { 
     } 
     } 
     ["*_transientValues"]=> 
     array(1) { 
     ["Shippo_Util_Set_elts"]=> 
     array(0) { 
     } 
     } 
     ["*_retrieveOptions"]=> 
     array(0) { 
     } 
    } 
    ["tracking_history"]=> 
    array(6) { 
     [0]=> 
     array(5) { 
     ["*_apiKey"]=> 
     string(52) "XXXXXXXXXXXXXXXX" 
     ["*_values"]=> 
     array(6) { 
      ["object_created"]=> 
      string(24) "2017-08-04T23:05:43.651Z" 
      ["object_id"]=> 
      string(32) "xxxxxxxxxxxxxxxxxxxxx" 
      ["status"]=> 
      string(7) "UNKNOWN" 
      ["status_details"]=> 
      string(29) "Shipment information received" 
      ["status_date"]=> 
      string(20) "2017-08-04T06:40:00Z" 
      ["location"]=> 
      NULL 
     } 
     ["*_unsavedValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_transientValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_retrieveOptions"]=> 
     array(0) { 
     } 
     } 
     [1]=> 
     array(5) { 
     ["*_apiKey"]=> 
     string(52) "XXXXXXXXXXXXXXXX" 
     ["*_values"]=> 
     array(6) { 
      ["object_created"]=> 
      string(24) "2017-08-07T17:10:41.233Z" 
      ["object_id"]=> 
      string(32) "xxxxxxxxxxxxxxxxxxxx" 
      ["status"]=> 
      string(7) "TRANSIT" 
      ["status_details"]=> 
      string(18) "Shipment picked up" 
      ["status_date"]=> 
      string(20) "2017-08-04T20:20:56Z" 
      ["location"]=> 
      NULL 
     } 
     ["*_unsavedValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_transientValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_retrieveOptions"]=> 
     array(0) { 
     } 
     } 
     [2]=> 
     array(5) { 
     ["*_apiKey"]=> 
     string(52) "XXXXXXXXXXXXXXXX" 
     ["*_values"]=> 
     array(6) { 
      ["object_created"]=> 
      string(24) "2017-08-07T17:10:41.233Z" 
      ["object_id"]=> 
      string(32) "xxxxxxxxxxxxxxxxxxxxxx" 
      ["status"]=> 
      string(7) "TRANSIT" 
      ["status_details"]=> 
      string(31) "Processed at MONTERREY - MEXICO" 
      ["status_date"]=> 
      string(20) "2017-08-04T21:09:30Z" 
      ["location"]=> 
      NULL 
     } 
     ["*_unsavedValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_transientValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_retrieveOptions"]=> 
     array(0) { 
     } 
     } 
     [3]=> 
     array(5) { 
     ["*_apiKey"]=> 
     string(52) "XXXXXXXXXXXXXXXX" 
     ["*_values"]=> 
     array(6) { 
      ["object_created"]=> 
      string(24) "2017-08-07T17:10:41.233Z" 
      ["object_id"]=> 
      string(32) "xxxxxxxxxxxxxxxxxxxxxx" 
      ["status"]=> 
      string(7) "TRANSIT" 
      ["status_details"]=> 
      string(39) "Departed Facility in MONTERREY - MEXICO" 
      ["status_date"]=> 
      string(20) "2017-08-05T00:16:59Z" 
      ["location"]=> 
      NULL 
     } 
     ["*_unsavedValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_transientValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_retrieveOptions"]=> 
     array(0) { 
     } 
     } 
     [4]=> 
     array(5) { 
     ["*_apiKey"]=> 
     string(52) "XXXXXXXXXXXXXXXX" 
     ["*_values"]=> 
     array(6) { 
      ["object_created"]=> 
      string(24) "2017-08-07T17:10:41.233Z" 
      ["object_id"]=> 
      string(32) "710e995c15654532bb23425b4c30426e" 
      ["status"]=> 
      string(7) "TRANSIT" 
      ["status_details"]=> 
      string(74) "Arrived at Delivery Facility in 
         CHIHUAHUA - MEXICO" 
      ["status_date"]=> 
      string(20) "2017-08-07T08:02:41Z" 
      ["location"]=> 
      NULL 
     } 
     ["*_unsavedValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_transientValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_retrieveOptions"]=> 
     array(0) { 
     } 
     } 
     [5]=> 
     array(5) { 
     ["*_apiKey"]=> 
     string(52) "XXXXXXXXXXXXXXXX" 
     ["*_values"]=> 
     array(6) { 
      ["object_created"]=> 
      string(24) "2017-08-07T17:10:41.233Z" 
      ["object_id"]=> 
      string(32) "XXXXXXXXXXXX" 
      ["status"]=> 
      string(7) "TRANSIT" 
      ["status_details"]=> 
      string(21) "With delivery courier" 
      ["status_date"]=> 
      string(20) "2017-08-07T10:04:14Z" 
      ["location"]=> 
      NULL 
     } 
     ["*_unsavedValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_transientValues"]=> 
     array(1) { 
      ["Shippo_Util_Set_elts"]=> 
      array(0) { 
      } 
     } 
     ["*_retrieveOptions"]=> 
     array(0) { 
     } 
     } 
    } 
    ["transaction"]=> 
    NULL 
    ["messages"]=> 
    array(0) { 
    } 
    } 
    ["*_unsavedValues"]=> 
    array(1) { 
    ["Shippo_Util_Set_elts"]=> 
    array(0) { 
    } 
    } 
    ["*_transientValues"]=> 
    array(1) { 
    ["Shippo_Util_Set_elts"]=> 
    array(0) { 
    } 
    } 
    ["*_retrieveOptions"]=> 
    array(0) { 
    } 
} 

這裏是林如何設法得到它($tracking_dhl高於陣列):

$tracking_dhl_status = (array) $tracking_dhl["*_values"]["tracking_status"]; 

echo "Traking status: " . $tracking_dhl_status["_values:protected"]["status"] . "<br>"; 

但我總是得到一個錯誤,該關鍵不存在。

+0

您正試圖訪問受保護的類成員,這些不是數組。名稱':protected'只是print_r試圖以數組的形式打印一個類,通知你成員的保護類型。使用'var_dump'而不是'print_r'來獲得更多關於你正在拋出的變量的信息。 – Geoffrey

+0

首先,這些不是數組,而是對象。因此,您的「API」(→該部分值得詳細闡述)已經將數據結構轉換爲內部對象表示。這通常意味着有訪問者包裝器(或多或少有意義的包裝器)。 – mario

+0

那麼這個對象就是我在API調用中返回給我的東西。然後,我將這個對象放到數組中,並嘗試獲得分發的狀態。如果它具有那個* _,那麼我需要做些什麼才能獲得該值? –

回答

0

所以我想出了一個解決方法,正如另一個線程中所建議的那樣,我使用foreach循環將對象更改爲數組,並在其中使用了foreach循環,並將其替換爲* _和presto。下面是代碼:

public function toArray($obj) { 
    if (is_object($obj)) $obj = (array)$obj; 
    if (is_array($obj)) { 
     $new = array(); 
     foreach ($obj as $key => $val) { 
      if (strpos(substr($key,0, 4), '_') !== false) { 
       $new[substr($key, 4)] = $this->toArray($val); 
      } else { 
       $new[$key] = $this->toArray($val); 
      } 
      //$new[str_replace("_", "", $key)] = $this->toArray($val); 
     } 
    } else { 
     $new = $obj; 
    } 

    return $new; 
} 

此功能幫助過我的對象轉換爲數組,並更改鍵名取出* _這在現實中使用了4個字符。我仍然不明白這一點。即使如此,通過這個,你可以擺脫物體中令人討厭的保護項目。我看到另一個有ltrim()而不是我的substr(),如果我做了,但我不知道爲什麼ltrim()不適合我。我希望這可以幫助任何人。