数组中的对象,将对象传递给 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,)));
我有一个 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,)));