代码:
$a = array('email'=>'orange@test','topic'=>'welcome onboard','timestamp'=>'2017-10-6');
$b = array();
foreach($a as $v){
$b[] = &$v;
}
var_dump($a);
var_dump($b);
结果:
array(3) {
["email"]=>
string(11) "orange@test"
["topic"]=>
string(15) "welcome onboard"
["timestamp"]=>
string(9) "2017-10-6"
}
array(3) {
[0]=>
&string(9) "2017-10-6"
[1]=>
&string(9) "2017-10-6"
[2]=>
&string(9) "2017-10-6"
}
为什么$ b的内容不是$ a的每个元素的引用? 我对$ b的期望应该是{& a [0],& a [1],& a [2]}而不是{& a [2],& a [2],&一个[2]}
答案 0 :(得分:3)
当我尝试引用密钥
时,即使我收到错误$a = array('email'=>'orange@test','topic'=>'welcome onboard','timestamp'=>'2017-10-6');
$b = array();
foreach($a as &$key=>&$v){
$b[] = &$v;
}
致命错误:关键元素不能作为参考
有人可以向我解释为什么你不能传递密钥作为参考吗?
因为该语言不支持此功能。你很难在大多数语言中找到这种能力,因此称为密钥。
所以我坚持这样的事情吗?
是。最好的方法是使用适当的密钥创建一个新数组。
有其他选择吗?
提供更好选择的唯一方法是了解您的具体情况。如果您的键映射到表列名称,那么最好的方法是将键保持原样,并在SQL中使用它们时将其转义。
回复: Alternatives to Pass both Key and Value By Reference:
参考仅适用于值
<?php
$a = array('email'=>'orange@test','topic'=>'welcome onboard','timestamp'=>'2017-10-6');
$b = array();
foreach($a as $key=>&$v){
$b[] = &$v;
}
echo "<pre>";
print_r($a);
echo "</pre>";echo "<pre>";
print_r($b);
输出
Array
(
[email] => orange@test
[topic] => welcome onboard
[timestamp] => 2017-10-6
)
Array
(
[0] => orange@test
[1] => welcome onboard
[2] => 2017-10-6
)
答案 1 :(得分:2)
在<li>
<p>I love hay bales. Took this snap on a drive through the countryside past some straw fields.</p>
<a href="photos/01.jpg" alt='Hay Bales' data-lightbox="image" data-title="I love hay bales. Took this snap on a drive through the countryside past some straw fields.">
<img src="photos/thumbnails/01.jpg" alt="Hay Bales">
</a>
</li>
<a href="photos/01.jpg" alt='Hay Bales' data-lightbox="image" data-title="I love hay bales. Took this snap on a drive through the countryside past some straw fields.">
<img src="photos/thumbnails/01.jpg" alt="Hay Bales">
</a>
<a href="photos/01.jpg" alt='Hay Bales' data-lightbox="image" data-title="I love hay bales. Took this snap on a drive through the countryside past some straw fields.">
<img src="photos/thumbnails/01.jpg" alt="Hay Bales">
</a>
<button>On/Off</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
循环中,您将新数组foreach
的每个元素设置为引用变量$b
。因此,在$v
循环结束时,它们都指向foreach
的最后/当前值,即#34; 2017-10-6&#34;。
你可以用这种方式引用数组$v
的元素:
$a
答案 2 :(得分:0)
像这样参考
foreach($a as &$v){
$b[] = &$v;
}
如果$a["email"] = "test";
更改,则会自动影响$b
答案 3 :(得分:0)
以下是反之亦然的参考。 b的每个元素的引用的每个元素。反向引用也是。
<?php
$a =
array('email'=>'orange@test','topic'=>'welcome
onboard','timestamp'=>'2017-10-6');
$b = array();
foreach($a as &$v){
$b[] = &$v;
}
$b[2]='11'; //make changes in any element,
//will reflect both array
var_dump($a);
var_dump($b);
以下是工作演示:https://ideone.com/icgVJY