为了账号安全,请及时绑定邮箱和手机立即绑定

PHP stdClass 和 foreach 对象

PHP stdClass 和 foreach 对象

PHP
牧羊人nacy 2023-07-21 16:22:42
所以我现在有一些代码看起来像这样:    $filter = new \stdClass();    $queryObj = $this->getpost['filter'];    $filters = new \stdClass();    $filters->team = $queryObj['team'];    $filters->skill = $queryObj['skill'];    $filters->division = $queryObj['division'];    $filter->filters = $filters;    $users = $managerStatistics->getManagerDeliveryData($filter);我觉得有必要这样做,因为在 getManagerDeliveryData(§filter) 中,有一个“foreach $filter->filters”..有谁知道如何以更好看的方式做到这一点?这对我来说看起来很乱,但我不知道在这里做什么..
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

您可以将构建数据的方式重写为更紧凑的格式,根据需要将每个数组定义转换为对象......

$filter = (object) [
        "filters" => (object) [ 'team' => $queryObj['team'], 
                'skill' => $queryObj['skill'], 
                'division' => $queryObj['division'] ]
];


查看完整回答
反对 回复 2023-07-21
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

如果将关联数组转换为对象,它就会成为stdClass具有匹配属性的对象。这是一个通用示例:


$arr = ['one' => 'foo', 'two' => 'bar', 'three' => 'meh']; 

$obj = (object) $arr;   


var_dump($obj);

这会给你:


object(stdClass)#2 (3) {

    ["one"] · string(3) "foo"

    ["two"] · string(3) "bar"

    ["three"] · string(3) "meh"

}

在您的情况下,如果您希望不必$queryObj一一命名您的键/值(如果过滤器列表不固定,因此不能进行硬编码,则这是必要的):


$filters = (object) $queryObj;

显然,源数组中的每个键/值对都成为对象中的属性/值对。如果您想省略某些特定值,请取消设置它们或使用array_intersect_key()等函数来仅转换所需的键。假设您$queryObject有一堆密钥,但您只想要示例中的密钥,您可以这样做:


$keymap = ['team', 'skill', 'division'];

$filters = (object) array_intersect_key(array_flip($keymap), $queryObject);


查看完整回答
反对 回复 2023-07-21
  • 2 回答
  • 0 关注
  • 61 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信