2015-10-16 178 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

欣赏关于此主题的所有信息。 –