| |
|
|
| | Прошу помощи в реализации задачки:
имеется строка, содержащая описание переменных через запятую, т.е. в виде "переменная1=значение1, переменная2=значение2". Необходимо из этого получить массив, который будет иметь ключи равные названиям переменных и соответствующие значения по значениям переменных, т.е. вид "переменная1 => значение1" и т.д. Возможен случай, когда имя переменной не будет указано в строке, а стоит только значение ("переменная1=значение1, переменная2=значение2, значение3"), тогда такое значение записывается в массив под очередной цифровой нумерацией 0, 1, 2... ("переменная1 => значение1, переменная2 => значение2, 0 => значение3").
Пробелы в значениях переменных игнорируются, за исключением случаев, когда значение заключено в двойные кавычки (тут оно сохраняется в массив "как есть").
Пока в стиле "что вижу, то и пою" придумал следующую функцию:
<?php
function strparse($str) {
$a = array();
$t = '';
$n = '';
# ключ "кавычки открыты"
$quot = FALSE;
for ($i=0; $i < strlen($str); $i++) {
if ($str[$i] == '"') {
$quot = !$quot;
continue;
}
if (!$quot && ($str[$i] == ' '))
continue;
# если кавычки открыты - однозначно записываем символ во врем.переменную
if ($quot) {
$t.= $str[$i];
continue;
}
# если "=", то это завершено чтение имени переменной
if ($str[$i] == '=') {
$n = strtolower($t);
$t = '';
continue;
}
# если ",", то это завершено чтение значения переменной
if ($str[$i] == ',') {
$v = $t;
$t = '';
# если есть имя переменной, то сохраняем значение под ним,
# иначе сохраняем без имени (под очередной цифрой: 0,1,...)
if ($n != '')
$a[$n] = $v;
else
$a[] = $v;
$n = '';
$v = '';
continue;
}
$t.= $str[$i];
}
if ($t != '') {
if ($n != '')
$a[$n] = $t;
else
$a[] = $t;
}
return $a;
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: Timofeich
(25.01.2008 в 00:07)
| | | есть стандартная ф-ция: parse_str($str); //см help
у которой нету всех тех примочек что вам нужны | |
| |
|
|
| |
|
|
| |
для: Волки
(25.01.2008 в 11:12)
| | | Да, parse_str() - эквивалентная функция. Вот только значения без заданного имени не обрататывает и разделение переменных иным символом.
Может, есть предложения просто упростить мой код? | |
| |
|
|