in_array检查它是否包含mm / dd / yyyy格式的日期

时间:2012-10-16 08:43:32

标签: php arrays date

我有一个动态数组$v,其内容根据提交的表单而变化。某些表单可能包含日期字段,而其他表单可能没有。对于所有表单,我使用相同的数组$v将值存储在key=>value对中,然后将其插入表中。所以有时数组可能看起来像

$v = array('patron_name'=>'some value',
           'place' => 'again some value',
           'pin' => 'blah blah')

而在其他时候它可能看起来像

$v = array('joomla'=>'some value again',
           'date_applied' => '23/04/2012',
          )

如上所述,内容因形式而异。我正在寻找的是首先检查$v是否包含dd/mm/yyy形式的值,如果是,请将其更改为yyyy-mm-dd格式以插入表格中。我可以处理转换部分,但我一直在确定$v是否包含日期。

所以基本上我打算以这种方式继续下去:

if(in_array('date in dd/mm/yyyy format', $v))
{
  // change it to yyyy-mm-dd
}
// and then insert into table
$flag = insert($tablename, $v);

任何帮助非常感谢。提前致谢

5 个答案:

答案 0 :(得分:4)

使用preg_replace_callback而不是in_array。将数组传递给它并匹配日期格式模式。如果模式匹配,请将其替换为回调。

示例(demo):

$v = array(
    'joomla'=>'some value again',
    'date_applied' => '23/04/2012',
);

$result = preg_replace_callback('#^\d{1,2}/\d{1,2}/\d{4}$#', function($match) {
    return DateTime::createFromFormat('d/m/Y', $match[0])->format('Y-m-d');
}, $v);

print_r($result);

在旁注中,由于Ymd包含与d / m / Y相同的值,因此您不必严格使用回调,而只能使用preg_replacedemo):

$result = preg_replace('#^(\d{1,2})/(\d{1,2})/(\d{4})$#', '$3-$2-$1', $v);

使用回调可以让你使用任意日期格式。

答案 1 :(得分:1)

您可以使用array_walk()加上preg_match()

function handle_dates(&$v)
{
    if (preg_match('#^(\d{1,2})/(\d{1,2})/(\d{4})$#', $v, $matches)) {
        $v = sprintf("%02d-%02d-%02d", $matches[3], $matches[2], $matches[1]);
    }
}

array_walk($v, 'handle_dates');

或者:

function replace_dates($v)
{
    return preg_replace('#^(\d{2})/(\d{2})/(\d{4})$#', '\3-\2-\1', $v);
}

$v = array_map('replace_dates', $v);

答案 2 :(得分:1)

in_array不接受一个关联数组,但是有很多关于如何使这个工作的例子:Check If In_Array (in Recursive Associative Array)(但是肯定地寻找更好的一个;)

至于检查是否有日期可以做多件事。

如果您知道日期将始终采用dd / mm / yyyy格式,则可以使用正则表达式(google应该给出足够的结果),使用preg_match检查值是否包含给定格式的字符串,如果这样格式化它。

如果格式可以改变(例如,如果它的人工输入,人们倾向于使用/或 - 取决于语言细节,只需测试strtotime();返回false或不足够。

示例正则表达式'untested'

  if (preg_match('/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/', $date) {
    // date found
  }

答案 3 :(得分:0)

如何使用array_search确定您的数组是否包含该格式的字符串?并获得关键。

答案 4 :(得分:0)

您可以轻松查看

if($v['date_applied']!="")
{
$date=date_create($v['date_applied']);
$fdate=date_format($date,'Y-m-d');
}

然后你的代码插入