数组中的对象,将对象传递给PHP方法

时间:2015-10-16 00:47:33

标签: php arrays api stdclass

我有一个PHP应用程序,其功能是为了获得API调用的信息而构建的。但是,我尝试通过传递模仿API数据的信息来使用此功能。

我对数组有点挣扎,这似乎是数组中的一个对象。

我可以访问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,)));

但这给了我一个&#34;试图获取非对象&#34; 错误的属性。请善待我,我已经尽力研究并自行构建,但无济于事。

2 个答案:

答案 0 :(得分: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']

访问数组元素

答案 1 :(得分:1)

最简单的方法是将assoc数组转换为对象

在你的情况下,这将是

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