API15:JRegistryFormatINI/stringToObject
From Joomla! Documentation
Description
Parse an .ini string, based on phpDocumentor phpDocumentor_parse_ini_file function
[<! removed edit link to red link >]
<! removed transcluded page call, red link never existed >
Syntax
& stringToObject($data, $process_sections=false)
| Parameter Name | Default Value | Description |
|---|---|---|
| $data | The INI string or array of lines | |
| $process_sections | false | add an associative index for each section [in brackets] |
Returns
object Data Object
Defined in
libraries/joomla/registry/format/ini.php
Importing
jimport( 'joomla.registry.format.ini' );
Source Body
function &stringToObject( $data, $process_sections = false )
{
static $inistocache;
if (!isset( $inistocache )) {
$inistocache = array();
}
if (is_string($data))
{
$lines = explode("\n", $data);
$hash = md5($data);
}
else
{
if (is_array($data)) {
$lines = $data;
} else {
$lines = array ();
}
$hash = md5(implode("\n",$lines));
}
if(array_key_exists($hash, $inistocache)) {
return $inistocache[$hash];
}
$obj = new stdClass();
$sec_name = '';
$unparsed = 0;
if (!$lines) {
return $obj;
}
foreach ($lines as $line)
{
// ignore comments
if ($line && $line{0} == ';') {
continue;
}
$line = trim($line);
if ($line == '') {
continue;
}
$lineLen = strlen($line);
if ($line && $line{0} == '[' && $line{$lineLen-1} == ']')
{
$sec_name = substr($line, 1, $lineLen - 2);
if ($process_sections) {
$obj-> $sec_name = new stdClass();
}
}
else
{
if ($pos = strpos($line, '='))
{
$property = trim(substr($line, 0, $pos));
// property is assumed to be ascii
if ($property && $property{0} == '"')
{
$propLen = strlen( $property );
if ($property{$propLen-1} == '"') {
$property = stripcslashes(substr($property, 1, $propLen - 2));
}
}
// AJE: 2006-11-06 Fixes problem where you want leading spaces
// for some parameters, eg, class suffix
// $value = trim(substr($line, $pos +1));
$value = substr($line, $pos +1);
if (strpos($value, '|') !== false && preg_match('#(?<!\\\)\|#', $value))
{
$newlines = explode('\n', $value);
$values = array();
foreach($newlines as $newlinekey=>$newline) {
// Explode the value if it is serialized as an arry of value1|value2|value3
$parts = preg_split('/(?<!\\\)\|/', $newline);
$array = (strcmp($parts[0], $newline) === 0) ? false : true;
$parts = str_replace('\|', '|', $parts);
foreach ($parts as $key => $value)
{
if ($value == 'false') {
$value = false;
}
else if ($value == 'true') {
$value = true;
}
else if ($value && $value{0} == '"')
{
$valueLen = strlen( $value );
if ($value{$valueLen-1} == '"') {
$value = stripcslashes(substr($value, 1, $valueLen - 2));
}
}
if(!isset($values[$newlinekey])) $values[$newlinekey] = array();
$values[$newlinekey][] = str_replace('\n', "\n", $value);
}
if (!$array) {
$values[$newlinekey] = $values[$newlinekey][0];
}
}
if ($process_sections)
{
if ($sec_name != '') {
$obj->$sec_name->$property = $values[$newlinekey];
} else {
$obj->$property = $values[$newlinekey];
}
}
else
{
$obj->$property = $values[$newlinekey];
}
}
else
{
//unescape the \|
$value = str_replace('\|', '|', $value);
if ($value == 'false') {
$value = false;
}
else if ($value == 'true') {
$value = true;
}
else if ($value && $value{0} == '"')
{
$valueLen = strlen( $value );
if ($value{$valueLen-1} == '"') {
$value = stripcslashes(substr($value, 1, $valueLen - 2));
}
}
if ($process_sections)
{
$value = str_replace('\n', "\n", $value);
if ($sec_name != '') {
$obj->$sec_name->$property = $value;
} else {
$obj->$property = $value;
}
}
else
{
$obj->$property = str_replace('\n', "\n", $value);
}
}
}
else
{
if ($line && $line{0} == ';') {
continue;
}
if ($process_sections)
{
$property = '__invalid'.$unparsed ++.'__';
if ($process_sections)
{
if ($sec_name != '') {
$obj->$sec_name->$property = trim($line);
} else {
$obj->$property = trim($line);
}
}
else
{
$obj->$property = trim($line);
}
}
}
}
}
$inistocache[$hash] = clone($obj);
return $obj;
}
[<! removed edit link to red link >] <! removed transcluded page call, red link never existed >
Examples
Code Examples