首先感谢您在我的问题上的时间。
对不起,如果这是重复的话,我合法搜索了3天,并没有找到我特定情况的答案。
第一行将数组的值转换为索引字符串
$path = self::extract_path($path);
提取后,$ path变为一个字符串,其格式类似于[' key1'] [' key2']
在这里,我测试是否在Keys字符串中找到了一个有价值的元素(ondemand),到目前为止一直很好。
if( $path !== FALSE && strpos($path, $element) !== FALSE){
$var_dim_str = 'coupon' . $path . '[recurrence]';
作为一个自我证明,我硬编码了我的一个特定场景元素,它确实存在,所以我的问题并不是我的变量的非初始化,正如大多数其他主题所暗示的那样。
var_dump($coupon['item']['ondemand']['recurrence']);
我的问题在于此处,我得到" ErrorException [注意]:未定义的变量:优惠券[item] [ondemand] [recurrence]"
$recurrence = $$var_dim_str;
[...]
这是我的var_dump输出:
这些是我的索引作为一个数组,它们被提取以重建变量的字符串',我有一些可变维度数组被调用,因此维度深度可能并不总是固定值,因此为什么我必须动态测试这个。
1- $ path,在被提取之前
[...]\modules\payment\classes\Helper\Payment.php:290:
array (size=2)
0 => string 'item' (length=4)
1 => string 'ondemand' (length=8)
2-我们在此处看到([' item'] [' ondemand'] [' reurrence'] => 3)存在
[...]\modules\payment\classes\Payment\Cart.php:266:
array (size=1)
'item' =>
array (size=3)
'ondemand' =>
array (size=14)
[...]
'recurrence' => string '3' (length=1)
[...]
3-我上面的var_dump输出正确。
[...]\modules\payment\classes\Payment\Cart.php:270:string '3' (length=1)
**所以,我的结论是PHP并不真的很感激我建造的#39;变量,但必须有一些方法来使这个逻辑工作......任何关于此的指针将非常感激。 **
答案 0 :(得分:0)
问题确实存在于$$ var_dim_str中。 $$所做的是将$$ variableName解析为$ variableName中包含的变量名。它基本上包含对基于变量名称的另一个变量的引用。从PHP站点:
变量变量采用变量的值并将其视为变量的名称。在上面的示例中,hello可以通过使用两个美元符号用作变量的名称。即。
所以......
// some variables
$name = 'Ellan' ;
$site = 'Stack Exchange' ;
$tags = 'PHP-7, Variables' ;
// we want $site
$variableName = 'site' ;
echo $$variableName ;
// we want $tags
$variableName = 'tags' ;
echo $$variableName ;
上面的代码将产生:
Stack Exchange PHP-7, Variables
为$ var_dim_str分配值时:
$var_dim_str = 'coupon' . $path . '[recurrence]';
$ var_dim_str不包含变量的名称。它包含一个字符串。
您确定要在此实例中使用$$吗?也许你真的想用:
$recurrence = $var_dim_str;