2017-07-21 35 views
1

我遇到了從循環內數組切片的問題。我想要做的是遍歷一個數組,每天返回數組中的3個不同部分。因此,例如第一天應該返回0,1,2第二天應該返回3,4,5等...我使用array_slice()它適用於第一次迭代,但在隨後的迭代中,它只返回一個數組與1項在裏面。任何幫助將非常感激!!如何在循環中一次訪問三個元素?

這是我目前有:

foreach ($days as $day) { 
    $j = $j + 1; 
    var_dump("j" . $j); 
    $activities = array_slice($activities, $j, $number_of_activities); 
    var_dump("day" . $day); 
    var_dump($activities); 
} 

這就是從返回的var_dump ...

string(2) "j1" 
string(4) "day1" 
array(3) { 
    [0]=> int(1) 
    [1]=> int(2) 
    [2]=> int(3) 
} 
string(2) "j2" 
string(4) "day2" 
array(1) { 
    [0]=> int(3) 
} 
+1

好吧,那麼以'$ days'開頭的是什麼?這就是說,請注意你在你的帖子中說過的話:爲了''d''你想要一個'd-1','d','d + 1'的切片,那麼爲什麼不寫你的代碼呢? –

+0

哈哈同意......請提供$天數組,以便我們可以用您的值測試代碼。 –

+1

'array_chunks($ days,3);' –

回答

1

我認爲這是在做什麼它應該。您將分配的活動重新分配給分片結果。所以在第二次迭代時,數組有三個元素,你從第二個索引開始,所以你的切片只有一個元素(最後一個)。我認爲你有一個邏輯錯誤。您可能需要一個臨時變量來保存切片而不是覆蓋活動。

0

我同意克里斯,我會用array_chunk()來完成這項任務。原因在於,如果在循環外部使用array_chunk(),則它是一次性完成函數調用,您可以通過塊索引儘可能多地訪問它。在循環中使用array_slice()將意味着每次迭代都會調用一次函數,效率會降低,因此不是最佳實踐。

考慮these demos

演示#1:的活動比需要的,但沒有問題:

$days=[1,2,3]; 
$activities=['Poker','Blackjack','Omaha','Pinochle','500','Euchre','Canasta','Hearts','Spades','Multitaire']; 
$activities_per_day=3; 
$activity_sets=array_chunk($activities,$activities_per_day); 

foreach($days as $i=>$d){ 
    echo "Day: $d, Activities: ",implode(', ',$activity_sets[$i]),"\n"; 
} 
/* 
Day: 1, Activities: Poker, Blackjack, Omaha 
Day: 2, Activities: Pinochle, 500, Euchre 
Day: 3, Activities: Canasta, Hearts, Spades 
*/ 

演示#2:沒有足夠的活動來填補最後一天,但沒有問題:

$days=[1,2,3]; 
$activities=['Poker','Blackjack','Omaha','Pinochle','500','Euchre','Canasta']; 
$activities_per_day=3; 
$activity_sets=array_chunk($activities,$activities_per_day); 

foreach($days as $i=>$d){ 
    echo "Day: $d, Activities: ",implode(', ',$activity_sets[$i]),"\n"; 
} 
/* 
Day: 1, Activities: Poker, Blackjack, Omaha 
Day: 2, Activities: Pinochle, 500, Euchre 
Day: 3, Activities: Canasta 

演示#3:最後一天沒有活動 - 導致問題:

$days=[1,2,3]; 
$activities=['Poker','Blackjack','Omaha','Pinochle','500','Euchre']; 
$activities_per_day=3; 
$activity_sets=array_chunk($activities,$activities_per_day); 

foreach($days as $i=>$d){ 
    echo "Day: $d, Activities: ",implode(', ',$activity_sets[$i]),"\n"; 
} 
/* 
Day: 1, Activities: Poker, Blackjack, Omaha 
Day: 2, Activities: Pinochle, 500, Euchre 
Day: 3, Activities: <br /> 
<b>Notice</b>: Undefined offset: 2 in <b>[...][...]</b> on line <b>33</b><br /> 
<br /> 
<b>Warning</b>: implode(): Invalid arguments passed in <b>[...][...]</b> on line <b>33</b><br /> 
*/ 
+0

@JavaStudent我剛剛在今天重新訪問此頁面。我的輸出是你想要做的,對吧?然後在循環中每次迭代使用'array_chunk'而不是'array_slice()'是更好的編碼習慣。我對你的任務感到困惑嗎? – mickmackusa

相關問題