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

Object inside an array, passing an object to a PHP method

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

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

我可以访问 api 提供的数组,所以当我使用以下代码时($triggers 是 api 调用 returns 的数组):

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,)));

但这给了我一个 "Trying to get property of non-object" 错误。请善待我,我已尽我所能自行研究和构建,但无济于事。

您当前正在创建并传递一个包含数组的数组,而您的函数需要一个对象数组。

你应该事先创建你的对象,然后构造你的参数数组,并将它传递给你的函数。

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

comment on php.net 以及该对象文档的其余部分可能对您有用。

By far the easiest and correct way to instantiate an empty generic php object that you can then modify for whatever purpose you choose: <?php $genericObject = new stdClass(); ?>

您在自己的代码中看到的错误消息是由函数内部的 $trigger->triggerid 引起的,而 $trigger 是一个数组而不是函数所期望的对象。使用 $someObject->propertyName 表示法访问对象属性,而使用 $someArray['keyName']

访问数组元素

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

在你的情况下是

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