yaml_parse
(PECL yaml >= 0.4.0)
yaml_parse — Parse a YAML stream
Description
Convert all or part of a YAML document stream to a PHP variable.
Parameters
-
input
-
The string to parse as a YAML document stream.
-
pos
-
Document to extract from stream (-1 for all documents, 0 for first document, ...).
-
ndocs
-
If
ndocs
is provided, then it is filled with the number of documents found in stream. -
callbacks
-
Content handlers for YAML nodes. Associative array of YAML tag => callable mappings. See parse callbacks for more details.
Return Values
Returns the value encoded in input
in appropriate
PHP type or FALSE
on failure. If pos
is -1 an
array will be returned with one entry for each document found
in the stream.
Examples
Example #1 yaml_parse() example
<?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
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);
?>
The above example will output something similar to:
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." }
See Also
- yaml_parse_file() - Parse a YAML stream from a file
- yaml_parse_url() - Parse a Yaml stream from a URL
- yaml_emit() - Returns the YAML representation of a value
Коментарии
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)
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.
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.