PHP 8.6.0 Beta 1 is available for testing

yaml_parse

(PECL yaml >= 0.4.0)

yaml_parseРазбирает поток YAML

Описание

function yaml_parse(
string $input,
int $pos = 0,
int &$ndocs = ?,
array $callbacks = null
): mixed

Конвертирует весь поток YAML или его часть и записывает в переменную.

Список параметров

input

Строка для парсинга как поток YAML.

pos

Документ для разбора (-1 для всех документов, 0 для первого документа, ...).

ndocs

Если ndocs найден, тогда он будет заменён на количество документов в потоке YAML.

callbacks

Обработчики содержимого для узлов YAML. Ассоциативный массив (array ), ключи которого являются тегами YAML, а значения callback-функциями (callable ), которые будут их обрабатывать. Более подробно этот механизм описан в разделе callback-функции разбора.

Возвращаемые значения

Возвращает значение, закодированное в input, в соответствующем типе PHP или false , если возникла ошибка. Если параметр pos равен -1, будет возвращён массив, содержащий по одной записи для каждого документа, найденного в потоке.

Примеры

Пример #1 Пример использования yaml_parse()

<?php
$yaml = <<<EOD
---
invoice: 34843
date: "2001-01-23"
bill-to: &id001
 given: Chris
 family: Dumars
 address:
 lines: |-
 458 Walkman Dr.
 Suite #292
 city: Royal Oak
 state: MI
 postal: 48046
 site: zxibit.esy.es
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;
$parsed = yaml_parse($yaml);
var_dump($parsed);
?>

Вывод приведённого примера будет похож на:

array(8) {
 ["invoice"]=>
 int(34843)
 ["date"]=>
 string(10) "2001年01月23日"
 ["bill-to"]=>
 &array(3) {
 ["given"]=>
 string(5) "Chris"
 ["family"]=>
 string(6) "Dumars"
 ["address"]=>
 array(4) {
 ["lines"]=>
 string(34) "458 Walkman Dr.
 Suite #292"
 ["city"]=>
 string(9) "Royal Oak"
 ["state"]=>
 string(2) "MI"
 ["postal"]=>
 int(48046)
 }
 }
 ["ship-to"]=>
 &array(3) {
 ["given"]=>
 string(5) "Chris"
 ["family"]=>
 string(6) "Dumars"
 ["address"]=>
 array(4) {
 ["lines"]=>
 string(34) "458 Walkman Dr.
 Suite #292"
 ["city"]=>
 string(9) "Royal Oak"
 ["state"]=>
 string(2) "MI"
 ["postal"]=>
 int(48046)
 }
 }
 ["product"]=>
 array(2) {
 [0]=>
 array(4) {
 ["sku"]=>
 string(6) "BL394D"
 ["quantity"]=>
 int(4)
 ["description"]=>
 string(10) "Basketball"
 ["price"]=>
 int(450)
 }
 [1]=>
 array(4) {
 ["sku"]=>
 string(7) "BL4438H"
 ["quantity"]=>
 int(1)
 ["description"]=>
 string(10) "Super Hoop"
 ["price"]=>
 int(2392)
 }
 }
 ["tax"]=>
 float(251.42)
 ["total"]=>
 float(4443.52)
 ["comments"]=>
 string(68) "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338."
}

Примечания

Внимание

Обрабатывать непроверенный пользовательский ввод, в случае когда для узлов YAML, использующих тег !php/object, разрешено использование функции unserialize() , крайне опасно. Это поведение можно отключить с помощью ini-настройки yaml.decode_php.

Смотрите также

  • yaml_parse_file() - Разбирает YAML-поток из файла
  • yaml_parse_url() - Разбирает YAML-поток по URL-адресу
  • yaml_emit() - Возвращает YAML-представление значения

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 3 notes

up
6
Zalmoksis
7 years ago
It seams the YAML standard version here is the 1.1 and not the (1.2 released in 2009), so all of the following values: y, Y, yes, Yes, YES, n, N, no, No, NO, true, True, TRUE, false, False, FALSE, on, On, ON, off, Off, OFF are confusingly at times interpreted as booleans.
up
6
alpacagm at gmail dot com
14 years ago
Simple usage example of interpreting custom tags:
<?php
$data=
"#yaml
---
data: !mytag bar test
...
";
function callback($value){
 return str_replace('bar','baz',$value);
}
$cnt;
$array=yaml_parse($data,0,$cnt,array('!mytag'=>'callback'));
print_r($array['data']);
?>
output:
Array
(
 [data] => baz test
)
note, there is a related bug in version 1.0.1 (see tracker)
up
1
laura dot dean at mooneleaf dot com
9 years ago
When entering the string through a form, I had to first use utf8_decode on the input before using yaml_parse or else I got a cryptic error message --
Warning: yaml_parse(): reading error encountered during parsing: control characters are not allowed (line 1, column 1)
-- even though the special character was buried deep in the file.
+Добавить

AltStyle によって変換されたページ (->オリジナル) /