我知道这个
$var1 = "10";
$var2 = "var1";
Run Code Online (Sandbox Code Playgroud)
然后
echo $$var2给我们10
我希望这个与数组
我有阵列
$intake_arr = array(5=>10,7=>20,8=>30,9=>40,10=>50,11=>60,12=>70);
Run Code Online (Sandbox Code Playgroud)
我有一些逻辑,将从数组集中选择一个数组,所有数组将看起来像$ intake_arr
如果我这样做 $target_arr = "intake_arr";
然后可以$$target_arr[5]产10?我试过,但我没有10个值,我怎么能用数组实现这一点
你的陈述($$target_arr[5])含糊不清.PHP不知道你真正想说的是什么:你的意思是:使用$target_arr[5]的值并预先设置$,将其用作变量,或者你想使用的值$target_arr,并获得该数组的第五个元素?
显然它是后者,但PHP并不知道.为了消除您的陈述的歧义,您必须使用花括号:
${$target_arr}[5];
Run Code Online (Sandbox Code Playgroud)
注意:
正如人们在评论中所说的那样,并删除了答案:变量变量,就像您正在使用的变量变量一样,是有风险的业务.9/10它可以,而且确实应该避免.它使你的代码更难读,更容易出错,并在与这两个主要缺点组合,这是杀手锏:它使你的代码非常努力,调试.
如果这只是一项技术练习,请考虑一下友情提示.如果你从某种教程/博客或其他类型的在线资源中得到这个:永远不要再访问该网站了.
如果你实际上正在处理一段代码,并且你已经决定使用变量vars解决一个特定的问题,那么可能会在代码审查中发布你的代码,让我知道,我会看看并试着提供一些建设性的批评,以帮助您走向更好的解决方案.
因为你实际上要做的是将一个数组复制到另一个变量中,那么这很容易.PHP提供了多种方法:
按分配复制:
默认情况下,PHP会在分配时复制数组,这意味着:
$someArray = range(1,10);//[1,2,3,4,5,6,7,8,9,10]
$foo = $someArray;
Run Code Online (Sandbox Code Playgroud)
指定一个副本中$someArray的变量$foo:
echo $foo[0], ' === ', $someArray[0];//echoes 1 === 1
$foo[0] += 123;
echo $foo[0], ' != ', $someArray[0];//echoes 123 != 1
Run Code Online (Sandbox Code Playgroud)
我可以更改其中一个数组元素的值,而不会影响原始数组,因为它已被复制.
这有一个风险,当你开始使用JSON编码数据时,很有可能你会得到类似的东西:
$obj = json_decode($string);
echo get_class($obj));//echoes stdClass, you have an object
Run Code Online (Sandbox Code Playgroud)
默认情况下,对象通过引用传递和分配,这意味着:
$obj = new stdClass;
$obj->some_property = 'foobar';
$foo = $obj;
$foo->some_property .= '2';
echo $obj->some_property;//echoes foobar2!
Run Code Online (Sandbox Code Playgroud)
通过改变一个属性$foo,$obj对象也会改变.仅仅因为它们都引用了完全相同的对象.
切片阵列:
对于前端开发人员(主要是,我认为,源于JS habbit)的一种更常见的方法是使用array_slice,这保证了返回数组的副本.通过添加的额外优势,您可以指定副本中需要的元素数量:
$someArray = range(1,100);//"large" array
$foo = array_slice($someArray, 0);//copy from index 0 to the end
$bar = array_slice($someArray, -10);//copy last 10 elements
$chunk = array_slice($someArray, 20, 4);//start at index 20, copy 4 elements
Run Code Online (Sandbox Code Playgroud)
如果您不想复制数组,而是从原始数据中提取一个部分,则可以splice使用数组(如split + slice):
$extract = array_splice($someArray, 0, 10);
echo count($someArray);//echoes 90
Run Code Online (Sandbox Code Playgroud)
这将从原始数组中删除前10个元素,并将它们分配给 $extract
花一些时间浏览PHP提供的无数(好,大约一百个)数组函数.