所以我有一个数月的数组:
$arr_month = array(
1=>'january',
2=>'february',
3=>'march',
4=>'april',
5=>'may',
6=>'june',
7=>'july',
8=>'august',
9=>'september',
10=>'october',
11=>'november',
12=>'december'
);
我也有字符串(我知道,它们看起来很奇怪......),如下所示:
23 de january del 2003
12 de may de 1976
6 de february de 1987
我想要的是找到并匹配字符串中的月份与数组并返回数组键。
这样:
23 de january del 2003 returns 1
12 de may de 1976 returns 5
6 de february de 1987 returns 2
依旧......
知道怎么做?
答案 0 :(得分:1)
$index = -1;
foreach ($arr_month as $k => $v) {
if (strstr($mystring, $v)) {
$index = $k;
break;
}
}
// exists with $index set
答案 1 :(得分:1)
这应该适合你。
$dateString = "23 de january del 2003"; // as an example
$exploded = explode (" ", $dateString); // separate the string into an array of words
$month = $exploded[2]; // we want the 3rd word in the array;
$key = array_search ($month, $arr_month); // lets find the needle in the haystack
print $key;
收益1
。
答案 2 :(得分:1)
你应该能够这样做:
<?php
function getMonth($time){
$matches = array();
preg_match("/[0-9] de ([a-z]+) de/", $time, $matches);
return date('n',strtotime($matches[1]));
}
?>
然后你甚至不需要你的月份数组:D
编辑如果由于某种原因需要数组:
<?php
function getMonth($time){
$matches = array();
$pattern = "/[0-9] de ([a-z]+) de/";
preg_match($pattern, $time, $matches);
$month = $matches[1];
$arr_month (
1=>'january',
2=>'february',
3=>'march',
4=>'april',
5=>'may',
6=>'june',
7=>'july',
8=>'august',
9=>'september',
10=>'october',
11=>'november',
12=>'december'
);
return in_array($month, $arr_month) ? array_search($month, $arr_month) : false;
}
?>
答案 3 :(得分:1)
您可以使用带数组键的可选搜索参数执行此操作:
$matchedKeys = array_keys($arr_month, "november");
var_dump($matchedKeys);
// array(1) { [0]=> int(11) }
如您所见,这将返回所有匹配键的数组。
答案 4 :(得分:1)
如果您正在尝试解析某个日期,请记住PHP可以为您做到这一点(尽管这取决于您的输入数据是多么随意 - 如果您事先知道日期格式,这显然更可靠)。
例如:
print_r(date_parse("6 de february de 1987"));
给出:
Array
(
[year] => 1987
[month] => 2
[day] =>
[hour] =>
[minute] =>
[second] =>
[fraction] =>
[warning_count] => 2
[warnings] => Array
(
[14] => Double timezone specification
[22] => The parsed date was invalid
)
[error_count] => 2
[errors] => Array
(
[0] => Unexpected character
[2] => The timezone could not be found in the database
)
[is_localtime] => 1
[zone_type] => 0
)
所以它当天放弃了,但它确实正确地确定了月份和年份。
使用更现代的DateTime
api会对您的输入失败(是法语还是英语的混合?)
但它确实适用于以下内容:
$d = new DateTime("6th february 1987", new DateTimeZone("UTC"));
print $d->format("Y-m-d H:i:s") . "\n";'
给出:
1987-02-06 00:00:00