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

时间:2016-07-31 04:53:05

标签: php

我有一个包含值为对象的键的对象,在这些对象内部还有另一个对象作为其中一个键的值。我已经能够通过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;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

你可以像这样嵌套循环:

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.