调整阵列时,循环逻辑出错

时间:2012-03-20 05:41:09

标签: php mysql arrays loops foreach

我有一个数组,表示我无法更改的表中的int类型的UNIX时间。有些行不是完整的UNIX时间戳,而是短几个整数。表格中存在这样的原因,但对于我的脚本,我需要字符串将非10位数行更改为“0”,将10位数行更改为日期(“Ymd”,?)形式。这是一个数组$ qucls的例子:

Array
(
    [0] => 1332594303
    [1] => 1330960502
    [2] => 1331227649
    [3] => 1331305503
    [4] => 1332594303
    [5] => 1331147102
    [6] => 1332680702
    [7] => 1331301902
    [8] => 1331048163
    [9] => 1332248704
    [10] => 1332421503
    [11] => 31536000
    [12] => 1331816703
    [13] => 604800
    [14] => 0
    [15] => 31536000
    [16] => 1332248703
    [17] => 31536000
    [18] => 1361922903
)

这是剧本:

$k=0
$l=0
foreach ($qucls as $dt[$k]){
    if (strlen($dt[$k]) < 10)
      $dt[$k++] = '0';
    else {$dt[$k++] = date("Ymd", $dt[$l++]);
 }
}
for ($l=0; $l < $k; $l++){
}

这是循环之后的结果:

Array
(
    [0] => 20120324
    [1] => 20120305
    [2] => 20120308
    [3] => 20120309
    [4] => 20120324
    [5] => 20120307
    [6] => 20120325
    [7] => 20120309
    [8] => 20120306
    [9] => 20120320
    [10] => 20120322
    [11] => 0
    [12] => 19700101
    [13] => 0
    [14] => 0
    [15] => 0
    [16] => 19700817
    [17] => 0
    [18] => 19700101
)

请注意,日期格式已正确格式化,直到达到第一个整数为strlen&lt; 10.此时,它将小于10的长度整数更改为“0”,这是正确的,但之后的日期是愚蠢的。它继续改变&lt;正确的10位数到0。

有人可以帮我弄清楚这个循环有什么问题吗?在ELSE开始之后,我对1970年的所有日期都没有得到正确的结果。我仍然是新人。

谢谢。

1 个答案:

答案 0 :(得分:1)

使用以下脚本

<?php
$qucls = array(
    0 => 1332594303,
    1 => 1330960502,
    2 => 1331227649,
    3 => 1331305503,
    4 => 1332594303,
    5 => 1331147102,
    6=> 1332680702,
    7=> 1331301902,
    8=> 1331048163,
    9=> 1332248704,
    10 => 1332421503,
    11 => 31536000,
    12 => 1331816703,
    13 => 604800,
    14 => 0,
    15 => 31536000,
    16 => 1332248703,
    17 => 31536000,
    18 => 1361922903
    );

foreach ($qucls as $key=>$value){
    if (strlen($value)< 10){
        $dt[] = 0;
    }else{
        $dt[] = date("Ymd", $value);
    }
 }
echo "<pre>";
print_r($array);
print_r($dt);
exit;
?>

您将获得以下输出

Array
(
    [0] => 20120324
    [1] => 20120305
    [2] => 20120308
    [3] => 20120309
    [4] => 20120324
    [5] => 20120307
    [6] => 20120325
    [7] => 20120309
    [8] => 20120306
    [9] => 20120320
    [10] => 20120322
    [11] => 0
    [12] => 20120315
    [13] => 0
    [14] => 0
    [15] => 0
    [16] => 20120320
    [17] => 0
    [18] => 20130226
)