Я пытаюсь определить даты в некоторых строках и день недели и поместить данные в другой массив.
Моя проблема в том, что данные поступают в массиве, но не в обычном порядке.
Пример № 1 структуры данных:
Array (
[3] => In ziua de Duminica 26.10.2014 Duminica 27.10.2013 // note both of dates in the same line
[4] => Consum de energie electrica
[5] => Mediu 6168 5407
[6] => Maxim 7233 6552
)
Пример № 2 структуры данных:
Array (
[3] => In ziua de Miercuri 15.10.2014 // note first line contains few more words
[4] => Miercuri 16.10.2013
[5] => Consum de energie electrica
[6] => Mediu 6573 6747
[7] => Maxim 7771 7892
)
Пример № 3 структуры данных:
Array (
[4] => Marti 14.10.2014
[6] => Marti 15.10.2013
[7] => Consum de energie electrica
[8] => Mediu 6453 6754
[9] => Maxim 7551 7860
)
Пример № 4 структуры данных:
Array (
[4] => Duminica 04.05.2014
[6] => Duminica // note the line with only day of week and next line is the date
[7] => 05.05.2013
[8] => Consum de energie electrica
[9] => Mediu 5265 4262
[10] => Maxim 6318 4873
)
Пример № 5 структуры данных:
Array (
[4] => Miercuri12.02.2014 // note the missing space between the day of week and date
[6] => Miercuri 13.02.2013
[7] => Consum de energie electrica
[8] => Mediu 7274 7434
[9] => Maxim 8313 8401
)
Все эти структуры повторяются. Я пытаюсь найти способ собрать строки для Mediu XXXX XXXX
а также Maxim XXXX XXXX
,
Я хочу создать массив, который должен выглядеть следующим образом
(давайте рассмотрим пример № 1):
Array (
[0] => Array (
[weekday] => Duminica
[date] => 26.10.2014
[Mediu] => 6168 // first value from line
[Maxim] => 7233 // first value from line
)
[1] => Array (
[weekday] => Duminica
[date] => 27.10.2013
[Mediu] => 5407 // second value from line
[Maxim] => 6552 // second value from line
)
)
Есть ли возможность этого добиться?
У меня нет идеи регулярного выражения для разделения данных.
Спасибо.
Что вы можете сделать, это преобразовать массив в строку, используя implode. Будет удобнее найти дни недели и даты:
$arr = array (
'3' => 'In ziua de Duminica 26.10.2014 Duminica 27.10.2013',
'4' => 'Consum de energie electrica',
'5' => 'Mediu 6168 5407',
'6' => 'Maxim 7233 6552'
);
$pattern = '~
(?<day0> Duminica|Luni|Marti|Miercuri|Joi|Vineri|S[iî]mbata ) \h*
(?<date0> [0-9.]{10} ) \h*
(?<day1> \g<day0> ) \h*
(?<date1> \g<date0> ) .*?
Mediu\ (?<Med0> [0-9]+ )\ (?<Med1> [0-9]+ ) \h+
Maxim\ (?<Max0> [0-9]+ )\ (?<Max1> [0-9]+ )
~xu';
$str = implode(' ', $arr);
if (preg_match($pattern, $str, $m)) {
foreach (range(0,1) as $i) {
$result[] = array(
'weekday' => $m["day$i"],
'date' => $m["date$i"],
'Mediu' => $m["Med$i"],
'Maxim' => $m["Max$i"] );
}
} else $result = false;
print_r($result);
Обратите внимание, что если вы хотите, вы можете избежать захвата дня недели и получить его с датой.
Других решений пока нет …