[英]PHP something wrong with refrence variable in foreach
我有這樣的數據:
$a = [
"attr1"=> null,
"list"=> [
[
"other_attr"=> 47,
"personal"=> [
[
"id"=> 3071,
"quantity"=> 4,
"price"=> 340000
]
]
],
[
"other_attr"=> 47,
"group"=> [
[
"id"=> 3086,
"quantity"=> 2,
"price"=> 350000
]
]
]
]];
並與 function 波紋管:
foreach( $a['list'] as &$value ){
if (!empty($value["personal"])) {
foreach ($value["personal"] as &$item) {
$item['F'] = "TREDA";
}
foreach ($value["personal"] as $item) {
print("do some thing here with new attribute F\n");
}
$value["C"] = 32213;
}
if (!empty($value["group"])) {
foreach ($value['group'] as $item) {
print("Do some thing here\n");
}
$value["C"] = "AAAA";
}
}
在 function 之后期望$a 的結果如下:
{"attr1":null,"list":[{"other_attr":47,"personal":[{"id":3071,"quantity":4,"price":340000,"F":"TREDA"}],"C":32213},{"other_attr":47,"group":[{"id":3086,"quantity":2,"price":350000}],"C":"AAAA"}]}
但實際數據錯誤如下:
{"attr1":null,"list":[{"other_attr":47,"personal":[{"id":3086,"quantity":2,"price":350000}],"C":32213},{"other_attr":47,"group":[{"id":3086,"quantity":2,"price":350000}],"C":"AAAA"}]}
Id 3071已被Id 3086替換。
任何人都可以在這里解釋我有什么問題嗎?
感謝幫助!
鏈接PHPOnline Sandbox中的 P/S 代碼演示
正如您所發現的,通過引用傳遞可能是一種危險的游戲。 這可能並不明顯,但您在此循環中創建了對$item
的引用:
foreach ($value["personal"] as &$item) {
然后它繼續引用$value["personal"]
中的第一個條目,即使您不再處於該循環中。 因此,這意味着稍后在您的代碼中執行以下操作:
foreach ($value['group'] as $item) {
您正在引用相同的$item
變量(這是對$value["personal"]
中的條目的引用。
因此, personal
內部的條目被替換為group
內部的條目。
如果您真的不需要引用,則最好(並且更安全)使用數組索引來更改值,例如
foreach ($value["personal"] as $index => $item) {
$item['F'] = "TREDA";
$value['personal'][$index] = $item;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.