Цикл логики работает неправильно при настройке массива - PullRequest
1 голос
/ 20 марта 2012

У меня есть массив, который представляет время UNIX в типе int из таблицы, которую я не могу изменить. Некоторые строки не являются полными временными метками 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
)

Обратите внимание, что форма даты форматируется должным образом до тех пор, пока она не достигнет 1-го целого числа, равного strlen <10. В этот момент она заменяет целое число длиной менее 10 на «0», что является правильным, но даты после этого бредят , Он продолжает правильно изменять <10-значные единицы на 0. </p>

Может кто-нибудь помочь мне понять, что не так в этом цикле? Я не совсем получаю правильный результат со всеми этими датами 1970 года после начала ELSE. Я все еще новичок в этом.

Спасибо.

1 Ответ

1 голос
/ 20 марта 2012

Используйте приведенный ниже скрипт

<?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
)
...