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?
答案 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
您要为变量分配空值,然后显式声明一个变量变量并尝试强制向其添加变量。您只是在滥用该功能。
编辑:由于您的代码未使用经过动态修改的变量名(至少就我在共享代码上看到的而言),您可以将变量串联在常规字符串变量中,并避免不必要的额外步骤。 (再次,这是我的看法,基于我在这里可以看到的代码,我不知道其余代码,或者它是否确实需要该额外功能)