Контентация 2 или более переменных переменных переменных

Я устанавливаю 2 набора переменных из 3. первый набор, который я получаю от почты. второй набор я получаю из базы данных.

код

1-й сет

$code = $_POST['code']; //A0001
$det1 = $_POST['det1']; //it something v1
$det2 = $_POST['det2']; //numero uno
$alid = $_POST['al_id'];

2-й сет

$sql = $conn->prepare('SELECT al_code, al_det_in, al_det_en FROM al where al_id=?');
$sql->execute([$alid]);
$stmt = $sql->fetch();

$alcode = $stmt['al_code'];  //A0001
$aldet1 = $stmt['al_det_in']; //it something
$aldet2 = $stmt['al_det_en']; //numero uno

осуждение

$$valA = $code . $det1 . $det2;
$$valB = $alcode . $aldet1 . $aldet2;

затем я хочу сравнить $$valA и $$valB в этом коде

if ( $$valA === $$valB ){
  //do A
}else{
  //do B
}

но он всегда дает неправильный ответ, поэтому я попытался повторить

echo $code ." $$ ". $det1 ." $$ ". $det2 ."$$". $$valA ." $$<br>";
echo $alcode ." ## ". $aldet1 ." ## ". $aldet2 ." ## ". $$valB ." ##<br>";

результат

A0001 $$ it something v1 $$ numero uno $$ A0001it somethingnumero uno $$
A0001 ## it something ## numero uno ## A0001it somethingnumero uno ##

Я уже пытался найти какой-то ответ в Google, но ни один из них не был похож на мой случай. если это уже был ответ на этот случай. надеюсь, кто-то может связать поток.

Редактировать По предложению ника пробовал на https://3v4l.org/

$code = "A0001";
$det1 = "it something v1";
$det2 = "numero uno";
$alid = "01";

$alcode = "A0001";
$aldet1 = "it something";
$aldet2 = "numero uno";
$alid2  = "01";

$valA = "";
$valB = "";

$$valA = $code. $det1. $det2;
$$valB = $alcode. $aldet1. $aldet2;

echo $code ." $$ ". $det1. " $$ " .$det2. " $$ " .$$valA. " $$\n";
echo $alcode ." $$ ". $aldet1. " $$ " .$aldet2. " $$ " .$$valB. " $$\n";

выход

Output for 7.2.11 | took 27 ms, 15.1 MiB
  A0001 $$ it something v1 $$ numero uno $$ A0001it somethingnumero uno $$
  A0001 ## it something ## numero uno ## A0001it somethingnumero uno ##

так это тиражируется. я попытался поменять порядок $$valA и $$valB, в результате проблема была в этом. так кто-нибудь знает, как правильно настроить $$valA и $$valB?

Я не могу воспроизвести вашу проблему. 3v4l.org/WkPtK

Nick 09.04.2019 05:12

я использую apache 2.4 и php 7.2 тс. Я хочу знать, что ваш результат правильный. не пропустил v1 на $$valA?

santo 09.04.2019 05:24

3v4l.org не использует PHP в Apache (см. о), но в этой демонстрации код запускался на PHP 7.2, и проблема не возникает.

Nick 09.04.2019 05:28

Подозреваю $det1 = "it something v1"; V1. Из-за того, что эта строка не находит совпадений.

Mayank Dudakiya 09.04.2019 06:52

на основе 3v4l.org/EVl35. виноваты были $$valA и $$valB. я пробовал ${$valA} / ${$valB} проблема все еще существует

santo 09.04.2019 07:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
5
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В вашем случае переменные переменные $$valA и $$valB на самом деле являются переменными такой же, потому что вы инициализировали $valA и $valB (с одним долларом) одной и той же строкой - обе они являются пустой строкой.

Итак, когда вы пишете:

$$valA = $code. $det1. $det2;

Вы говорите: «Назначьте переменной, имя которой является пустой строкой, значение $code. $det1. $det2;.

Затем вы делаете:

$$valB = $alcode. $aldet1. $aldet2;

Что означает: «присвоить переменной, имя которой является пустой строкой, значение $alcode. $aldet1. $aldet2;

Таким образом, в обоих случаях вы присваиваете значение переменной такой же (той, имя которой является пустой строкой). Таким образом, второе присваивание перезаписывает результат первого присваивания.

Хотя у вас есть две переменные-переменные, это просто разные обозначения для доступа к одной и той же переменной. Так что всегда $$valA == $$valB, что бы ни назначать (одному из) им.

Из кода неясно, почему вы хотите использовать переменные переменные. Просто назначьте $valA и $valB вместо этого, и if будет работать как положено. Если вы действительно хотите работать с переменными переменными, убедитесь, что $valA и $valB разные.

спасибо, просто вставьте $valA и $valB, все работает. я просто хочу попробовать переменные переменные. но когда я пытался инициализировать $$valA и $$valB, он возвращал ошибку, как в 3v4l.org/j4pF9. таким образом я инициализирую $valA и $valB.

santo 09.04.2019 07:18

В этой ссылке вы никогда не инициализируете $valA, что является обязательным условием, прежде чем вы сможете начать использовать $$valA. Основной вопрос на самом деле таков: почему вы хотите использовать переменные переменные? Имейте в виду, что $$valA — это не обычная переменная, это «переменная переменная» из-за двойного доллара. На самом деле вы никогда не должны его использовать, в любом случае это плохая практика.

trincot 09.04.2019 07:20

результат такой же, как и мой код выше, вы можете увидеть в этой ссылке 3v4l.org/BaTSl

santo 09.04.2019 07:49

Что вас удивляет в этом коде? Это работает, как я объяснил в своем ответе.

trincot 09.04.2019 08:01

я согласен, что ответом является использование простого соперничества. я имею в виду, что при использовании 2 переменных переменных он перезаписывал бы переменные переменные раньше. даже если вы уже инициализировали его $valA и $valB, например, как 3v4l.org/BaTSl

santo 09.04.2019 08:06

Я не понимаю, что вы имеете в виду, но я полагаю, вы согласны с этим?

trincot 09.04.2019 08:33

Эта ошибка возникает из-за того, что вы неправильно используете функцию переменных переменных.

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

Например

$theoriginal = "I am the original variable";
$thenew = "theoriginal";

echo $thenew; // output: theoriginal
echo $$thenew; // output: I am the original variable

Вы присваиваете пустые значения своим переменным, а затем явно объявляете переменную переменную и пытаетесь принудительно добавить к ней переменные. Вы просто неправильно используете функцию.

Обновлено: поскольку в вашем коде не используются динамически изменяемые имена переменных (по крайней мере, насколько я вижу в коде, которым вы поделились), вы можете просто объединить переменные в обычную строковую переменную и избежать дополнительных шагов, которые не требуются. (Еще раз, это мое мнение, основанное на коде, который я вижу здесь, я не знаю остальной код или нужна ли ему эта дополнительная функция)

так что как настроить. в руководстве по php $a = 'привет'; тогда $$a = 'мир'; вывод - привет, мир. так что я скучаю по интерпретации этого. Итак, если мы настроим $$valA = 'Hello A'; затем $$valB = 'Привет Б'; Предположим, одна и та же переменная. затем $$valB перезапишет $$valA

santo 09.04.2019 07:59

$a = 'hello' и $$a = 'world' означают, что сначала создается переменная a, а затем создается новая переменная с использованием содержимого a, поэтому $a $$a равно $a $hello, когда вы объявляли $$a, вы просто создавали переменную $hello, что-то, что также будет равно ${$a}, что на самом деле означает $hello.

user3153340 09.04.2019 08:07

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