Как записать в массив значения переменных, взятых из строки?

#!/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 шт):

Автор решения: becouse

Можно использовать функцию 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

https://3v4l.org/jEGKD

При выводе булев представлен в виде 0 и 1, если вы хотите конвертировать это в строку, то делайте замену, например с тернарным оператором:

$boo = $boo ? 'True' : 'False';

https://3v4l.org/FfPbR

→ Ссылка