2016-07-31 61 views
0

我有一個對象,其中包含值爲對象的鍵,而在這些對象內部還有另一個對象作爲其中一個鍵的值。我已經能夠通過做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; 
      } 
     } 
    } 
+0

請出示你如何試圖解決這個問題,在這裏你出了錯一些努力,什麼錯誤,結果你已經收到了。 – alexi2

+0

它是json字符串嗎? – RomanPerekhrest

+1

可能的重複[如何將對象轉換爲數組?](http://stackoverflow.com/questions/2476876/how-do-i-convert-an-object-to-an-array) – user2182349

回答

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. 
+0

現在忽略回報。這些循環實際上是一個我在其他地方調用的函數。但是,就你發佈的片段而言,我原來嘗試過爲每個循環嵌套,並且它寫出了每個想要的值的兩倍。我認爲我的問題是我沒有使用第二個foreach循環的鍵值對。我會嘗試這個代碼並回復你。 :) –

+0

好吧,如果你的代碼不是關於返回false/true,那麼我的答案可能不適合。但是,請使用更相關的代碼更新您的問題。 – trincot

+0

編輯:只是試了一下,它就像一個魅力。你是一個天才的先生:) 編輯2:主對象始終有一個關鍵在裏面,但那個關鍵可以是空的,我認爲我知道如何去解決現在:)再一次,謝謝你! –

相關問題