2013-08-21 40 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