Nano Hash - криптовалюты, майнинг, программирование

Вычисление выражений в строках PHP

Есть ли способ оценить выражение прямо внутри строки PHP?

В Perl вы можете проделать трюк, создав ссылку на массив, а затем сразу разыменовав его. Когда Perl интерполирует строку, он вычисляет выражение внутри ссылки на массив:

"string @{[2+2]} string"

и он будет оценивать 2+2 внутри строки.

Что насчет PHP. Есть ли такая конструкция в PHP, которая позволяет вам оценивать выражения внутри строки (через интерполяцию)?

23.10.2014

  • возможный дубликат Как оценить формулу, переданную как строку в PHP?< /а> 23.10.2014
  • Нет, но вы можете использовать что-то вроде этого - github.com/jlawrence11/Classes + stackoverflow.com/questions/5057320/ 23.10.2014
  • Является ли выражение жестко запрограммированным в такой строке, или вам передается строка, содержащая выражение, и вам нужно ее оценить? Если он жестко закодирован, просто выньте его и соедините, как ответ Джонатана Грея. 23.10.2014
  • @Dagon Основываясь на этой возможной дублирующей ссылке, OP также может придерживаться PERL. 23.10.2014
  • Либо preg_replace_callback (подход /e был проще и допустим для таких узких шаблонов), либо строковые varexpressions с $_ = "trim"; и echo "string {$_(2+2)} string"; например. 23.10.2014
  • Простой ответ: Нет. PHP не оценивает выражения внутри строк. 23.10.2014
  • Менее простой ответ: ДА. PHP может оценивать выражения через callback-функции, см. сообщение ниже. 19.05.2015

Ответы:


1

В поисках того же самого я сделал следующее, и вы даже можете смоделировать этот perl-синтаксис:

    $s = 'testing to calculate @{[sin(2+2)]} and @{[round(cos(23*3),3)]}';
    $s = preg_replace_callback("[@{\[(.*?)\]\}]",'parseEval',$s);
    echo $s;
    //output: testing to calculate -0.75680249530793 and 0.993

    function parseEval($match) {
      //unsecure but still..
      eval('$ev = ' . $match[1] . ';');
      return $ev;
    }
05.05.2015

2
  • Ну, это делает работу. PHP — это интерпретируемый язык, но он также скомпилирован в байт-код для повышения производительности. Неважно, как именно вы выполняете задачу, потому что в любом случае движок узнает, что вам нужна строка плюс результат уравнения плюс еще одна строка в качестве конечной строки. 23.10.2014
  • Я думаю, что это лучший ответ. Если у кого-то нет более умного ответа, я приму этот ответ. 24.10.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..