Как записать в массив значения переменных, взятых из строки?
#!/usr/bin/php
<?php
$a = 15; # целое
$fl = 3.14; # с плавающей точкой
$boo = TRUE; # boolean
$str = "stroka"; # строка
$mas = array();
$mas[0] = 'echo "$a $fl $boo $str ";';
$mas[1] = substr("$mas[0]",5,-1);
echo "$mas[1]\n";
?>
Задача следующая. Мне нужно взять значение первого элемента массива, обрезать его слева и справа, так, чтобы получилась строка "$a $fl $boo $str ". С этим проблем нет. Потом мне нужно получить значения переменных из этой строки и записать результат во второй элемент массива. Как можно это сделать?
echo "$mas[1]\n"; выдает "$a $fl $boo $str ", но мне нужно получить
15 3.14 True stroka
Попробовал следующий способ, но он не сработал:
$mas[1] = substr("$mas[0]",6,-2);
$mas[1] = "mas[1]";
echo "$mas[1]\n";
Ответы (2 шт):
Можно использовать функцию eval (с осторожностью.)
Добавил выбор части строки заключенной в кавычки по регулярному выражению.
Далее делим через пробел на переменные и преобразуем в массив.
$a = 15; # целое
$fl = 3.14; # с плавающей точкой
$boo = TRUE; # boolean
$str = "stroka"; # строка
$mas = array();
$mas[0] = 'echo "$a $fl $boo $str ";';
preg_match('/"(.*)\s+"/', $mas[0], $match, PREG_OFFSET_CAPTURE);
$vars=preg_split('/ /', $match[1][0]);
$res=array();
foreach ($vars as $var) {
eval("\$s = \"$var\";");
$res[]=$s;
}
print_r($res);
Результат
Array
(
[0] => 15
[1] => 3.14
[2] => 1
[3] => stroka
)
$a = 15;
$fl = 3.14;
$boo = true;
$str = "stroka";
$mas = array();
$mas[0] = 'echo "$a $fl $boo $str ";';
preg_match_all('/\$\K[^\s]+/', $mas[0], $matches);
echo join(' ', array_values(compact($matches[0]))); // 15 3.14 1 stroka
При выводе булев представлен в виде 0 и 1, если вы хотите конвертировать это в строку, то делайте замену, например с тернарным оператором:
$boo = $boo ? 'True' : 'False';