Contenation 2 или более переменных переменных переменных - PullRequest
0 голосов
/ 09 апреля 2019

я установил 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 ##

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

Редактировать При предложении никнейма я попробовал 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?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

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

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

Например,

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

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

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

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

0 голосов
/ 09 апреля 2019

В вашем случае переменные $$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 различны.

...