0

だから私は月の配列を持っています:

$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

等々...

どのようにアイデアはありますか?

4

5 に答える 5

1
$index = -1;
foreach ($arr_month as $k => $v) {
   if (strstr($mystring, $v)) {
      $index = $k;
      break;
   }
}
// exists with $index set
于 2012-09-25T23:56:21.217 に答える
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ます。

詳細については、 http://php.net/manual/en/function.array-search.phpを参照してください。

于 2012-09-26T00:03:56.413 に答える
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;
}
?>
于 2012-09-26T00:15:20.237 に答える
1

これは、配列キーを使用したオプションの検索パラメーターを使用して行うことができます。

$matchedKeys = array_keys($arr_month, "november");
var_dump($matchedKeys);
// array(1) { [0]=> int(11) }

ご覧のとおり、これは一致するすべてのキーの配列を返します。

于 2012-09-26T00:17:39.133 に答える
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
)

そのため、当日​​はあきらめましたが、月と年は正しく識別されました。

より現代的なDateTimeAPIを使用すると、入力に失敗します(フランス語と英語が混在していますか?)

ただし、次の場合には機能します。

$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
于 2012-09-26T00:32:31.473 に答える