Я хочу загрузить переменные из файла в виде строки и сравнить ее позже
структура файла: имя переменной; результат
например.,
$arr['x'];5
$a;53
$b - $a;27
Я загружаю этот файл (работает) и назначаю первый элемент после разделения на $ x, например,
$x = "$arr['x']";
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
$result = 5; // 2nd item of split - loaded from file line (ok)
а затем сравните
if ($result == $x)
{
echo "ok";
}
или этого нельзя сделать? PS: минимальный пример - поэтому я убрал загрузку из файла и разбил






Почему вы написали заключенный $arr['x'] в двойных кавычках вот так
$x = "$arr['x']";
Удалите кавычки из этого утверждения и сделайте это так
$x = $arr['x'];
он только показывает, что это строка, которая исходит из файла
Поскольку у вас есть выражения в ваших переменных, вам нужно будет либо написать синтаксический анализатор выражений, либо использовать eval. Вот как вы можете заставить его работать с eval:
$vars = array("\$arr['x'];5", "\$a;53", "\$b - \$a;27");
$arr['x'] = 5;
$a = 54;
$b = 81;
foreach ($vars as $var) {
list($x, $result) = explode(';', $var);
if (eval("return $result == $x;")) {
echo "$x = $result\n";
}
else {
echo "$x != $result\n";
}
}
Выход
$arr['x'] = 5
$a != 53
$b - $a = 27
спасибо всем и спасибо нику и eval - я тоже пробовал это несколько часов назад, но забыл использовать ";" внутри строки ... так что вы решили это и спасли мне день - tnx много
@ Роберт рад это слышать. Если это действительно ответ на ваш вопрос, пометьте ответ как принятый (галочка под стрелками вверх / вниз рядом с ответом). См. stackoverflow.com/help/someone-answers
сделаю это - но мне нужно больше репутации
@Robert, вам не нужна репутация, чтобы принять ответ (значок галочки под стрелками голосования), только чтобы использовать стрелки голосования, и вы фактически получите репутацию (2 балла), приняв ответ. stackoverflow.com/help/whats-reputation
Какова цель этого файла? Могут быть более эффективные способы сделать это, например, сохранить массив в файле PHP.