CakeFest 2024: The Official CakePHP Conference

yaml_parse

(PECL yaml >= 0.4.0)

yaml_parseAnaliza una secuencia de texto en formato YAML

Descripción

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

Convierte toda o parte de una secuencia de texto en YAML a una variable en PHP.

Parámetros

input

La secuencia de texto (string) a analizar en formato YAML.

pos

Documento YAML a extraer desde la secuencia de texto (-1 para analizar todos los documentos, 0 solo para el primer documento, etc).

ndocs

Si se facilita ndocs, se completará con el número de documentos encontrados en la secuencia de texto.

callbacks

Controlador de contenido para los nodos YAML. Es un array associativo de etiquetas YAML => asociando sus callback correspondientes. Ver Analizar callbacks para más información.

Valores devueltos

Devuelve el valor codificado de input en el formato apropiado de PHP o false en caso de error. Si el valor de pos es -1 devolverá un array con una entrada por cada documento encontrado en el texto.

Ejemplos

Ejemplo #1 Ejemplo de 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
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);
?>

El resultado del ejemplo sería algo similar a:

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."
}

Notas

Advertencia

El procesamiento de las entradas de los usuarios no confiables con yaml_parse() es peligroso si el uso de unserialize() está habilitado para los nodos usando la etiqueta !php/object. Este comportamiento puede ser desactivado por el uso de el ajuste ini yaml.decode_php.

Ver también

add a note

User Contributed Notes 3 notes

up
6
Zalmoksis
5 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
12 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
7 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.
To Top