2016-01-31 15 views
6

में अगले आइटम का संदर्भ मैं समय रेखा बनाने के लिए created_at द्वारा क्रमबद्ध एक लार्वा संग्रह के माध्यम से लूपिंग कर रहा हूं। प्रत्येक आइटम की आरंभ तिथि created_at है, और अंतिम तिथि निम्न आइटम का created_at है। यदि यह आखिरी वस्तु है, तो ईवेंट सिर्फ 30 दिनों के लिए रहता है।लैरवेल संग्रह

मेरे वर्तमान कोड यह है:

@foreach ($statushistory->where('itemid', $timelineitemid) as $hist) 
    [ '{{$hist->newstatus}}', new Date({{$hist->created_at->format('Y')}}, {{$hist->created_at->format('n')-1}}, {{$hist->created_at->format('j')}}), new Date({{$hist->created_at->format('Y')}}, {{$hist->created_at->format('n')-1}}, {{$hist->created_at->format('j')}}) ], 
@endforeach 

आप यहाँ देख सकते हैं की समाप्ति तिथि अभी आरंभ तिथि रूप में ही है, लेकिन मैं इसे अगले आइटम की आरंभ तिथि की जरूरत है। मैंने सोचा कि last() जैसे संग्रहों के लिए एक सहायक होगा जो मैं केवल next() या जो कुछ भी कह सकता हूं। चूंकि कोई संख्यात्मक कुंजी नहीं है, इसलिए मैं केवल एक जोड़ नहीं सकता हूं और इसे पकड़ सकता हूं। आइटम को तिथि के आधार पर क्रमबद्ध किया जाता है, और केवल आईडी प्रकार फ़ील्ड डेटाबेस से एक है जो 1434 या 1356 जैसी यादृच्छिक आईडी है।

अगले आइटम की start_date को कैसे प्राप्त करें, और जांचें कि क्या हम हैं आखिरी वस्तु? मैंने PHP के next फ़ंक्शन को देखा लेकिन मुझे नहीं लगता कि यह मेरी ज़रूरत है।

बहुत धन्यवाद

उत्तर

2

संग्रह एक incrementing सूचकांक द्वारा keyed किया जाएगा ताकि आप ऐसा करने में सक्षम होना चाहिए ...

$collection = $statushistory->where('itemid', $timelineitemid); 

foreach ($collection->values() as $index=>$hist){ 
     //stuff here 
     $next =$collection->get(++$index) ; 
} 

ब्लेड वाक्य रचना स्पष्ट रूप से कुछ अलग है, लेकिन उम्मीद है कि विचार

+0

शीर्ष युक्तियाँ। दो छोटे अवलोकनों के साथ मेरा उत्तर –

+0

सही उत्तर अपडेट किया है। सबसे पहले, मुझे लगता है कि 'कहां' विधि अनावश्यक है, क्योंकि 'statushistory' पहले से ही एक संग्रह है (अन्यथा यह प्रश्न में दिखाए गए अनुसार इसे फिर से चालू करना संभव नहीं होगा)। चूंकि ओपी ने निर्दिष्ट किया कि संग्रह को सॉर्ट किया गया था, इसे डेटाबेस से प्राप्त करने के बाद सॉर्ट किया गया हो सकता है, इसलिए सरणी कुंजी को मिश्रित किया जा सकता है, इसलिए 'foreach' को सुनिश्चित करने के लिए' $ संग्रह-> मान() 'को फिर से चालू करना चाहिए '$ अनुक्रमणिका 'मान वास्तव में अनुक्रमिक हैं। – Bogdan

+0

@Bogdan ये काम नहीं कर रहे हैं। $ अगला var हमेशा शून्य है। कोई विचार...? – samiles

2
उदाहरण देकर स्पष्ट करना

आपको पहले इटरेटर प्राप्त करना होगा:

$collection = $collection->getIterator(); 
$current = current($collection); 
$next = next($collection);