2011-03-28 101 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