2015-10-16 221 views
0

我有一個PHP應用程序,它具有構建用於期望API調用信息的函數。但是,我試圖通過傳遞模仿API數據的信息來使用這個函數。數組中的對象,將對象傳遞給PHP方法

我在數組中掙扎了一番,這似乎是數組中的一個對象。

我可以訪問該陣列,所述API提供的,所以當我使用下面的代碼($triggers是陣列的API調用返回):

print("<pre>".print_r($triggers,true)."</pre>");

我得到以下輸出:

Array 
(
    [0] => stdClass Object 
     (
      [triggerid] => 18186 
      [status] => 0 
      [value] => 0 
     ) 

這是函數的開頭:

function iterate_triggers($triggers){ 
    $trigger_id_values = array(); 
    foreach($triggers as $trigger) { 
     //Necessary to show human readable status messages. 
     $check_status = array(0=>"Up", 1=>"Down", 2=>"Degraded", 3=>"Maintenance"); 
     array_push ($trigger_id_values, [$trigger->triggerid, $trigger->value]); 

所以如果我想通過這個函數[triggerid] => 18186[value] => 1我該怎麼做?

目前我想:

iterate_triggers(array(0 => array("triggerid" => 18186,"status" => 0,"value" => 1,))); 

但是這給了我一個「試圖獲得非對象的屬性」錯誤。請對我很好,我已經盡了我的努力去研究和自己構建這個無濟於事。

+0

不知道如果我的評論會有所幫助,但僅僅想指出這個錯誤的字面意思,那麼當它實際上是一個數組時,你試圖訪問一個對象,因此,「嘗試獲取非對象的屬性」。 – hzq

+0

以及它是有幫助的,但那是我的問題的一部分。我不知道如何將它作爲一個對象傳遞給函數。 –

回答

1

最簡單的方法是將assoc命令數組轉換隻是一個對象

在你的情況下訪問,這將是

iterate_triggers(array(0 => (object)array("triggerid" => 18186,"status" => 0,"value" => 1,))); 
1

您正在創建並傳遞一個包含數組的數組,而您的函數需要一個對象數組。

你應該事先創建你的對象,然後構造你的參數數組,並將它傳遞給你的函數。

$obj = new \stdClass(); 
$obj->triggerid = 18186; 
$obj->status = 0; 
$obj->value = 1; 
$arr = array($obj); 
iterate_triggers($arr); 

這個comment on php.net以及該對象文檔的其餘部分可能對您有用。

到目前爲止實例化一個空的通用PHP對象,然後可以修改不管出於什麼目的的最簡單,最正確的方法你選擇:<?php $genericObject = new stdClass(); ?>

你與你自己的代碼的錯誤訊息造成通過$trigger->triggerid裏面的函數,當$trigger是一個數組而不是一個對象,因爲函數期望。對象屬性是使用$someObject->propertyName符號訪問,而數組元素使用$someArray['keyName']

+0

欣賞關於此主題的所有信息。 –