2011-03-28 148 views
0

嗨,我想知道是否有人能指出我對這個問題的正確方向,我只是不知道從哪裏開始。通過嵌套數組循環測試並輸出結果相同的結果

我有如下這種結構

Array ( 
    [0] => Array ([day_id] => 1 [plan_id] => 3 [day_num] => 1 [schedule_time] => 1300866720 [checkin_time] => [fine] =>) 
    [1] => Array ([day_id] => 2 [plan_id] => 3 [day_num] => 2 [schedule_time] => 1300953120 [checkin_time] => [fine] =>) 
    [2] => Array ([day_id] => 3 [plan_id] => 3 [day_num] => 3 [schedule_time] => 1301039520 [checkin_time] => [fine] =>) 
    [3] => Array ([day_id] => 4 [plan_id] => 3 [day_num] => 4 [schedule_time] => 1301125920 [checkin_time] => [fine] =>)) 

我希望能夠做的是循環通過它測試「schedule_time」的特定時間的數組,如果它匹配整個數組保存到一個新的陣列。所以說陣列0和1匹配它會輸出這樣

Array ( 
     [0] => Array ([day_id] => 1 [plan_id] => 3 [day_num] => 1 [schedule_time] => 1300866720 [checkin_time] => [fine] =>) 
     [1] => Array ([day_id] => 2 [plan_id] => 3 [day_num] => 2 [schedule_time] => 1300953120 [checkin_time] => [fine] =>)) 

相同結構等

回答

2

你基本上可以說一切了。您需要創建一個新的arrayloop而不是現有的和check some condition

$new_array = array(); 

foreach($array as $item) { 
    if($item['schedule_time'] > something) { 
     $new_array[] = $item; 
    } 
} 

我建議閱讀文檔。

+0

非常感謝。我很難把我的頭腦放在每個foreach語句上。坐下來學習這個過程。 – willmcneilly 2011-03-28 17:39:05

+1

@willmcneilly:像這樣想:數組是元素列表。 'foreach'循環讓你在每次迭代中訪問這些元素。它甚至接近英語:*對於這些元素中的每一個都這樣做。*元素再次是數組這一事實並沒有什麼不同。 – 2011-03-28 17:40:52

+1

只是想我會補充說,它完美的作品,但第二個最後括號必須改爲一個捲曲的右括號。小的語法錯誤。 – willmcneilly 2011-03-28 18:45:33

2
$mySpecialTimeToMatch = 0; //whatever time you want to match 
$newArray = array(); 
foreach ($arrayScheduledTasks as $task) { 
    foreach ($task as $key => $data) { 
     if("schedule_time" == $key && $mySpecialTimeToMatch == $data) { 
      $newArray[] = $task; 
     } 
    } 
} 

print_r($newArray); 
+0

爲什麼這麼複雜?不需要遍歷內部數組。這是不必要的開銷。 – 2011-03-28 17:31:14

+0

你是對的。這是不必要的開銷。從邏輯的角度來看,它更有意義。嵌套數組匹配嵌套循環。如果速度是一個問題,請使用Felix的解決方案。 – 2011-03-28 17:34:12

+0

@ SeanC:不,它沒有意義。一個使用數組來獲得'O(1)'訪問時間。如果我知道我想訪問第5個元素,我會做'$ a [5]',直到'i == 5'才使用'for'循環。 – 2011-03-28 17:37:17