Сохранить имя переменной и результат в строку, разделить и сравнить - но не работает

Я хочу загрузить переменные из файла в виде строки и сравнить ее позже

структура файла: имя переменной; результат

например.,

$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: минимальный пример - поэтому я убрал загрузку из файла и разбил

Какова цель этого файла? Могут быть более эффективные способы сделать это, например, сохранить массив в файле PHP.

ArtisticPhoenix 30.10.2018 23:29
"переменные из файла" - это не переменная, когда она находится в файле. Это просто строка. Может быть, есть эквивалент в скрипте php? Это очень похоже на проблему XY.
Jeff 30.10.2018 23:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Почему вы написали заключенный $arr['x'] в двойных кавычках вот так

$x = "$arr['x']";

Удалите кавычки из этого утверждения и сделайте это так

$x = $arr['x'];

он только показывает, что это строка, которая исходит из файла

Robert 30.10.2018 23:31
Ответ принят как подходящий

Поскольку у вас есть выражения в ваших переменных, вам нужно будет либо написать синтаксический анализатор выражений, либо использовать 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

Демо на 3v4l.org

спасибо всем и спасибо нику и eval - я тоже пробовал это несколько часов назад, но забыл использовать ";" внутри строки ... так что вы решили это и спасли мне день - tnx много

Robert 31.10.2018 00:26

@ Роберт рад это слышать. Если это действительно ответ на ваш вопрос, пометьте ответ как принятый (галочка под стрелками вверх / вниз рядом с ответом). См. stackoverflow.com/help/someone-answers

Nick 31.10.2018 00:28

сделаю это - но мне нужно больше репутации

Robert 31.10.2018 00:49

@Robert, вам не нужна репутация, чтобы принять ответ (значок галочки под стрелками голосования), только чтобы использовать стрелки голосования, и вы фактически получите репутацию (2 балла), приняв ответ. stackoverflow.com/help/whats-reputation

Nick 31.10.2018 00:51

Другие вопросы по теме