【问题标题】:Remove upper array elements that are out of range in php删除php中超出范围的上部数组元素
【发布时间】:2013-08-23 16:04:43
【问题描述】:

我有一个与 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++;
    }
}

根据条件,我想显示summery(我在这里省略了)。但它什么也不显示,因为条件永远不会满足。当数据被提取并且范围正确满足时,将显示摘要。
现在我怎样才能将指针移动到我的记录应该匹配的确切范围。简而言之,我想删除数组的一些元素,以便像这样形成新数组。

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

因为开始日期是2013-08-06,它介于第一个值和第二个值之间,因此我想将指针移动到第一个索引而不是保持在 0,或者我想对数组进行切片。我怎样才能做到这一点?

另一件事是我无法更改我提供的条件,因为它已经正确显示了summery。

编辑

$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'  ),

在此数组中,您可以看到第一和第二范围内的记录。

【问题讨论】:

  • 您的条件永远不会起作用,因为日期不能早于也不能等于或晚于另一个日期......所以请明确关于哪些变量的预期结果!
  • 你真的在比较原始字符串吗?这是行不通的。 PHP 应该如何知道哪个字符串“更大”?您必须将它们转换为数字或编写自己的比较。
  • @Chris:原始字符串比较将使用这种显式格式。自己试试。 :)
  • 抱歉我更新了问题
  • 请告诉我这个条件:$row['date'] &lt; $week_array[$week_counter] &amp;&amp; $row['date'] &gt;=$week_array[$week_counter] 将返回 true 的日期!

标签: php arrays loops conditional-statements


【解决方案1】:

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

$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',
            );

【讨论】:

  • @TobiasKun 抱歉给我带来的麻烦我找到了答案
  • 如果这解决了您的问题,您应该点击对勾将您的问题标记为已回答。
猜你喜欢
  • 2018-09-05
  • 1970-01-01
  • 2014-10-16
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
相关资源
最近更新 更多