PHP stdClass 和 foreach 对象

所以我现在有一些代码看起来像这样:


    $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”..


有谁知道如何以更好看的方式做到这一点?这对我来说看起来很乱,但我不知道在这里做什么..


牧羊人nacy
浏览 64回答 2
2回答

波斯汪

您可以将构建数据的方式重写为更紧凑的格式,根据需要将每个数组定义转换为对象......$filter = (object) [         "filters" => (object) [ 'team' => $queryObj['team'],                  'skill' => $queryObj['skill'],                  'division' => $queryObj['division'] ] ];

qq_遁去的一_1

如果将关联数组转换为对象,它就会成为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);
打开App,查看更多内容
随时随地看视频慕课网APP