我有一个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; 错误的属性。请善待我,我已经尽力研究并自行构建,但无济于事。
答案 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,)));