首頁 >後端開發 >php教程 >PHP為什麼要用array_combine方法影響了原數組

PHP為什麼要用array_combine方法影響了原數組

WBOY
WBOY原創
2016-08-04 09:19:291437瀏覽

請看下面的程式碼:

在處理前有兩個陣列arrTitlearrHref,

其中arrTitle內容如下:

PHP為什麼要用array_combine方法影響了原數組

arrHref內容如下:

PHP為什麼要用array_combine方法影響了原數組

<code class="php">//将title数组中首元素取出,作为栏目标题
foreach ($arrTitle as &$title) {
    $text [] = $title[0];
    unset($title[0]);
}

//将href数组中首元素取出,作为栏目url
foreach ($arrHref as &$href) {
    $url [] = $href[0];
    unset($href[0]);
}

print_r($arrTitle);
//重新组织title项
$title = array_combine($text, $url);

print_r($arrTitle);die;</code>

運行上面的PHP程式碼,把title和href中每項的首元素取出並去除,然而問題來了,在執行array_combine之前,$arrTitle是這樣的:

PHP為什麼要用array_combine方法影響了原數組

然而在執行array_combine之後,$arrTitle變成了這樣:

PHP為什麼要用array_combine方法影響了原數組

為什麼,$arrTitle的最後一個元素變成了array_combine()的結果,而array_combine()函數並沒有對$arrTitle執行了修改?

回覆內容:

請看下面的程式碼:

在處理前有兩個陣列arrTitlearrHref,

其中arrTitle內容如下:

PHP為什麼要用array_combine方法影響了原數組

arrHref內容如下:

PHP為什麼要用array_combine方法影響了原數組

<code class="php">//将title数组中首元素取出,作为栏目标题
foreach ($arrTitle as &$title) {
    $text [] = $title[0];
    unset($title[0]);
}

//将href数组中首元素取出,作为栏目url
foreach ($arrHref as &$href) {
    $url [] = $href[0];
    unset($href[0]);
}

print_r($arrTitle);
//重新组织title项
$title = array_combine($text, $url);

print_r($arrTitle);die;</code>

運行上面的PHP程式碼,把title和href中每項的首元素取出並去除,然而問題來了,在執行array_combine之前,$arrTitle是這樣的:

PHP為什麼要用array_combine方法影響了原數組

然而在執行array_combine之後,$arrTitle變成了這樣:

PHP為什麼要用array_combine方法影響了原數組

為什麼,$arrTitle的最後一個元素變成了array_combine()的結果,而array_combine()函數並沒有對$arrTitle執行了修改?

<code>**$title** = array_combine($text, $url);
</code>

這裡的$title 和上面循環裡的 $title 重名,改個名字就好了。 php 裡沒有區塊作用域。

此bug已經解除,感謝 @whyreal 指出重名問題。

由於在foreach循環中,以引用方式遍歷數組,當循環結束時,$title指向了$arrTitle的最後一組元素。

由於PHP沒有塊級作用域,在$title = array_combine($arr1, $arr2),之後這個$title同時修改了它指向的$arrTitle的最後一組元素,由此產生了bug。

修改後面$title的名稱解除此bug。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn