竞争变量2个或更多变量

时间:2019-04-09 02:39:02

标签: php string variables combinations

i setup 2设置3个变量的内容。我从邮局得到的第一套。我从数据库中获得的第二组。

代码

第一套

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

第二组

$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 :(得分:0)

在您的情况下,变量变量$$valA$$valB实际上是相同变量,因为您初始化了$valA$valB(一美元)到同一字符串-它们都是空字符串。

所以当您写:

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

您说的是“将名称为空字符串的变量赋值为$code. $det1. $det2;

然后您这样做:

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

意思是:“将名称为空字符串的变量赋值为$alcode. $aldet1. $aldet2;

因此,在两种情况下,您都将分配给 same 变量(名称为空字符串的变量)。因此,第二个作业将覆盖第一个作业的结果。

尽管您有两个变量变量,但是它们只是访问同一变量的不同符号。因此,无论何时$$valA == $$valB,无论分配给它们(其中之一)。

从代码中尚不清楚为什么要使用变量变量。只需分配给$valA$valB即可,if将按预期工作。如果您确实想使用变量变量,请确保$valA$valB不同。

答案 1 :(得分:0)

发生此错误是因为您滥用变量变量功能。

此功能意味着变量变量将读取变量,并在变量的内容中搜索与其他变量匹配的名称。

例如

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

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

您要为变量分配空值,然后显式声明一个变量变量并尝试强制向其添加变量。您只是在滥用该功能。

编辑:由于您的代码未使用经过动态修改的变量名(至少就我在共享代码上看到的而言),您可以将变量串联在常规字符串变量中,并避免不必要的额外步骤。 (再次,这是我的看法,基于我在这里可以看到的代码,我不知道其余代码,或者它是否确实需要该额外功能)