[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: парсер yaml
Страницы: 1, 2
twin
Цитата (Invis1ble @ 26.10.2015 - 16:21)
сделали б уже форк, да прошлись в IDE Ctrl+H -> Symfony -> ABC
Я же говорю, он слишком тяжелый и замудреный для учебного фреймворка. Там много лишнего, что нами использоваться не будет. А так мы сейчас его почистим, с другими скрестим и выведем новую породу YAML-light smile.gif

За одно пороемся в разных исхониках.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
pamparam
вот что намудрил...
выставляю на всеобщую критику


class Yaml
{
/**
* Очищаем Yaml строки от маркеров и комментариев в начале и в конце
*
*
@param string $value The input YAML string
*
*
@return string A cleaned up YAML string
*/

private function cleanup($value)
{
$value = str_replace([("\r\n", "\r")], "\n", $value);
// очищаем YAML шапку
$value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#u', '', $value);

// удаляем комментарии
$value = preg_replace('#^(\#.*?\n)+#s', '', $value);

// удаляем маркер (---)
$value = preg_replace('#^\-\-\-.*?\n#s', '', $value);

// удаляем маркер (...)
$value = preg_replace('#\.\.\.\s*$#', '', $value);
return $value;
}
/**
* массив из строк Yaml
*
@param $str
*
@return array
*/

public function arrayLine($str)
{

$line = explode("\n", $str);

foreach ($line as $val) {
$yaml_dec[] = preg_replace('#^-#', ' ', $val);
}

//дальше нужно сделать разбор каждой строки
$i = 0;
foreach ($yaml_dec as $val) {
$yaml_array [] = explode(":", $val);

// если значение НЕ пустое
if (!empty($yaml_array[$i][1])) {
$var1[] = $yaml_array[$i][0];
$var2[] = $yaml_array[$i][1];
}
$i++;
}
$yaml = array_combine($var1, $var2);

return $yaml;
}

/**
* получаем одномерный массив
*
@param $str
*
@return array
*/


public function parser($str)
{
// очищаем и делаем массив
$strline = $this->cleanup($str);
return $this->arrayLine($strline);
}
}


из такого yaml


$yaml = <<<EOD
#sdjfhhsdjk
invoice: 34843
date: "2001-01-23"
bill-to: &id001
given: Chris
family: Dumars
address:
city: Royal Oak
state: MI
postal: 48046
ship-to: *id001
product:
- sku: BL394D
quantity: 4
description: Basketball
price: 450
- sku: BL4438H
quantity: 1
description: Super Hoop
price: 2392
tax: 251.420000
total: 4443.520000
comments: Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.
...

EOD;


можно получить
такой массив

Array
(
[
invoice] => 34843
[date] => "2001-01-23"
[bill-to] => &id001
[ given] => Chris
[ family] => Dumars
[ city] => Royal Oak
[ state] => MI
[ postal] => 48046
[ship-to] => *id001
[ sku] => BL4438H
[ quantity] => 1
[ description] => Super Hoop
[ price] => 2392
[tax] => 251.420000
[total] => 4443.520000
[comments] => Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.
)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.