循环通过另一个对象内部的对象


Looping through an object inside of another object

我有一个对象,它包含值为对象的键,在这些对象内部还有另一个对象作为其中一个键的值。我已经能够通过做4个循环从我需要的深度嵌套对象中获得一个特定的值,但我想知道是否有更好的方法

{
  record1: {
    key1: value1,
    key2: value2,
    key3: {
      key_x1: value_x1,
      key_x2: value_x2,
      key_x3: value_x3
    }
  }
  record2: {
    key1: value1,
    key2: value2,
    key3: {
      key_x1: value_x1,
      key_x2: value_x2,
      key_x3: value_x3
    }
  }
}

因此,对于每个记录(record1record2等),我需要从key_x1中取出值并将其存储在一个数组中。关于如何在没有4个foreach循环的情况下实现这一点,有什么想法吗?

编辑:这是我的作品,只是看起来很难看:

   $mainObject
   $a = [];
   $dateArray = [];
    foreach ($mainObject as $individualOb) {
        $dates = $individualOb->getDate();
        $a[] = $dates;
    }
    if (empty($a)) {
        return true;
    } else {
        foreach ($a as $date) {
            foreach ($date as $key => $value) {
                if ($key == 'date') {
                    $dateArray[] = $value;
                }
            }
        }
        foreach ($dateArray as $value) {
            if(strtotime($value) < strtotime('-1 year') ) {
                return true;
            }
        }
    }

您可以嵌套这样的循环:

foreach ($mainObject as $individualOb) {
    foreach ($individualOb->getDate() as $key => $value) {
        if ($key == 'date' && strtotime($value) < strtotime('-1 year') ) {
            return true;
        }
    }
}

我不知道为什么在没有元素的情况下要返回true,因为false似乎更合乎逻辑。无论如何,你可以直接在$mainObject:上进行测试

if (empty($mainObject)) {
    return true;
} else // ...etc.