【问题标题】:PHP - get array in objectPHP - 在对象中获取数组
【发布时间】:2016-07-12 15:23:30
【问题描述】:

我将以下对象显示为 Json 对象:

Vtiger_RequestObject([
  valuemap: Vtiger_Request: private
]=>Array([
  __vtrftk
]=>sid: 172e53bdd05f5ef334859018d08043fb563b23b9,
1468335904[
  picklistDependency
]=>[

][
  module
]=>Calendar[
  action
]=>SaveAjax[
  defaultCallDuration
]=>5[
  defaultOtherEventDuration
]=>5[
  userChangedEndDateTime
]=>0[
  subject
]=>jhala12345tst[
  assigned_user_id
]=>1[
  date_start
]=>12-07-2016[
  time_start
]=>05: 05PM[
  due_date
]=>12-07-2016[
  time_end
]=>05: 10PM[
  eventstatus
]=>Dovoláno[
  activitytype
]=>Call[
  cf_1181
]=>Odchozí[
  followup_date_start
]=>[
  followup_time_start
]=>[
  popupReferenceModule
]=>Potentials[
  contact_id
]=>[
  contact_id_display
]=>[
  relatedContactInfo
]=>[
  parent_id
]=>[
  parent_id_display
]=>)[
  rawvaluemap: Vtiger_Request: private
]=>Array([
  __vtrftk
]=>sid: 172e53bdd05f5ef334859018d08043fb563b23b9,
1468335904[
  picklistDependency
]=>[

][
  module
]=>Calendar[
  action
]=>SaveAjax[
  defaultCallDuration
]=>5[
  defaultOtherEventDuration
]=>5[
  userChangedEndDateTime
]=>0[
  subject
]=>jhala12345tst[
  assigned_user_id
]=>1[
  date_start
]=>12-07-2016[
  time_start
]=>05: 05PM[
  due_date
]=>12-07-2016[
  time_end
]=>05: 10PM[
  eventstatus
]=>Dovoláno[
  activitytype
]=>Call[
  cf_1181
]=>Odchozí[
  followup_date_start
]=>[
  followup_time_start
]=>[
  popupReferenceModule
]=>Potentials[
  contact_id
]=>[
  contact_id_display
]=>[
  relatedContactInfo
]=>[
  parent_id
]=>[
  parent_id_display
]=>)[
  defaultmap: Vtiger_Request: private
]=>Array())

我想用 foreach 探索数组并用array_key_exists() 搜索[cf_1181] => Odchozí。是否可以?

我怎么能意识到这一点?

【问题讨论】:

  • 由于您在正确格式化问题方面付出的努力很少,因此这是一个不费吹灰之力的答案:是的,这是可能的。
  • 对不起,有人编辑了我的帖子并将描述更改为 json 对象。

标签: php arrays object foreach


【解决方案1】:

你不能改变创建这个对象的类吗? 简单的方法 - 将 getter 添加到类中,但如果您无法更改类,则可以使用 Reflection api。 但是速度很慢!

$reflectionClass = new ReflectionClass('Vtiger_Request');
$reflectionProperty = $reflectionClass->getProperty('valuemap');
$reflectionProperty->setAccessible(true);
var_dump($reflectionProperty->getValue($obj)); // TODO $obj - is you object

【讨论】:

  • 我必须将什么定义为对象?例如,如果我定义$obj = 'cf_1181';,它就不起作用...
  • $obj - 必须有 Vtiger_Request 的实例。你写“我有这个对象:Vtiger_Request” - 这是我的例子中的变量 $obj
  • 好的,我测试了$obj = 'Vtiger_Request';,它也不起作用,而且php也不打印任何错误。
  • 请阅读我之前的评论。 $obj - 必须是 Vtiger_Request 类的实例。不是字符串。你如何在问题中显示对象?这个对象有变量吗? $obj = var_dump 中的变量...
  • 当我在我的代码中使用你的 $reflectionProperty = $reflectionClass->getProperty('valuemap'); 时,print_r 停止工作。我的代码<?php session_start(); $data = $_SESSION['jhalaQCtst']; class Vtiger_Request { } $reflectionClass = new ReflectionClass('Vtiger_Request'); //$reflectionProperty = $reflectionClass->getProperty('valuemap'); //$reflectionProperty->setAccessible(true); //var_dump($reflectionProperty->getValue($obj)); print_r($data); ?>
【解决方案2】:

仅适用于 vtiger,这适用于 7.x 版
您可以通过Vtiger_Request 方法获取所有数据:

getall()

get($key, $defvalue = '') 

类似

$data_all_data = $request->getAll();

 $data_by_key = $request->get($key); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多