2013-08-21 43 views
2

我有一个简单的问题与数组有关的PHP。
这是问题所在。删除超出范围的上层数组元素php

我有这样

$week_array = array(
        '2013-08-18', 
        '2013-08-11', 
        '2013-08-04', 
        '2013-07-28', 
        '2013-07-21', 
       ); 

一个数组,我检索这些记录

$records = array(
        array( '2013-08-06' ), 
        array( '2013-08-05' ), 
        array( '2013-08-04' ), 
        array( '2013-08-03' ), 
        array( '2013-08-03' ), 
        array( '2013-08-02' ), 
        array( '2013-08-02' ), 
        array( '2013-08-01' ), 
        array( '2013-08-01' ), 
        array( '2013-07-31' ), 
        array( '2013-07-31' ), 
        array( '2013-07-30' ), 
       ); 

这里是我的代码

$week_counter = 0;    
foreach($records as $row){ 
    if($row['date'] < $week_array[$week_counter] && $row['date'] >=$week_array[$week_counter+1]){ 
     echo 'workig'; 
     echo '<br>'; 
     $week_counter++; 
    } 
} 

在我想要显示的条件基础总结(我在这里省略)。但它没有显示任何内容,因为条件从未满足当数据被提取并且范围适当时,显示总结。
现在我该如何将指针移动到我的记录应该匹配的确切范围。简单地说,我想删除一些数组元素,以便新数组形成这样。

$week_array = array(
        '2013-08-11', 
        '2013-08-04', 
        '2013-07-28', 
        '2013-07-21', 
       );    

由于开始日期是2013-08-06该第一和第二值之间未来因此,我希望移动指针到第一索引而不是保持在0或我想切片阵列。我怎样才能做到这一点?

另一件事是,我不能改变我提供的条件,因为它已经正确显示夏季。

编辑

$records = array(
        array( '2013-08-12' ), 
        array( '2013-08-09' ), 
        array( '2013-08-06' ), 
        array( '2013-08-06' ), 
        array( '2013-08-05' ), 
        array( '2013-08-04' ), 
        array( '2013-08-03' ), 
        array( '2013-08-03' ), 
        array( '2013-08-02' ), 
        array( '2013-08-02' ), 
        array( '2013-08-01' ), 
        array( '2013-08-01' ), 
        array( '2013-07-31' ), 
        array( '2013-07-31' ), 
        array( '2013-07-30' ), 

在这个数组,你可以看到有记录在第一和第二范围的到来。

+0

你的状态永远不会起作用,因为日期不能早是和也等于或晚于另一个......所以请明确预期的结果应该是关于什么哪变量! –

+0

你真的比较原始字符串吗?这是行不通的。 PHP应该如何知道哪个字符串“更大”?您必须将它们转换为数字或编写自己的比较。 – Chris

+0

@Chris:原始字符串比较将使用这种明确的格式。亲自尝试一下。 :) –

回答

0

经过一番研究,我发现它的工作是这样

$week_array = array(
       '2013-08-18', 
       '2013-08-11', 
       '2013-08-04', 
       '2013-07-28', 
       '2013-07-21', 
      ); 

$records = array(
        array( '2013-08-06' ), 
        array( '2013-08-06' ), 
        array( '2013-08-05' ), 
        array( '2013-08-04' ), 
        array( '2013-08-03' ), 
        array( '2013-08-03' ), 
        array( '2013-08-02' ), 
        array( '2013-08-02' ), 
        array( '2013-08-01' ), 
        array( '2013-08-01' ), 
        array( '2013-07-31' ), 
        array( '2013-07-31' ), 
        array( '2013-07-30' ), 
       ); 
$week_counter = 0; 

if(count($week_array) > 0){ 
    $counter = 0; 
    foreach($week_array as $sunday){ 
     if($calls[0] > $sunday){ 
      $week_array = array_slice($week_array, $counter); 
      break; 
     } 
     $counter++; 
    } 
} 

foreach($records as $row){ 
    if($row['date'] < $week_array[$week_counter] && $row['date'] >=$week_array[$week_counter+1]){ 
     echo 'workig'; 
     echo '<br>'; 
     $week_counter++; 
    } 
} 

这工作正是我想要的。由于循环之前新生成的一周阵列是这样

$week_array = array(
       '2013-08-11', 
       '2013-08-04', 
       '2013-07-28', 
       '2013-07-21', 
      ); 
+0

@TobiasKun对不起,我让我找到了答案 –

+0

如果这解决了你的问题,你应该点击检查标记你的问题为答案。 – Chris