2011-06-16 139 views
19

我用PHP循環的工作,我有關於如何取消設置一個問題會影響數組鍵。該數組使用由PHP分配的標準數字鍵,0, 1, 2, 3 etc...。每當unset()運行在一個數組值上時,數組鍵是否被混洗或者像以前一樣被維護?PHP取消設置陣列值效應

謝謝你的時間。

+10

這是你本來平凡嘗試了自己... – 2011-06-16 18:43:11

+1

他可以嘗試自己,但現在這個問題在這裏凝成這是簡單的取消設置的谷歌搜索非常重要的。它肯定幫了我,所以我感謝你奧利弗。 – 2017-05-01 00:44:38

+1

@SweetChillyPhilly這已經不是第一次取代文檔/簡單的例子。很高興幫助。 – 2017-05-01 16:30:38

回答

39

中的鍵不是洗牌或重新編號。 unset()鍵被簡單地刪除,其他鍵仍然存在。

$a = array(1,2,3,4,5); 
unset($a[2]); 
print_r($a); 

Array 
(
    [0] => 1 
    [1] => 2 
    [3] => 4 
    [4] => 5 
) 
+0

這就是我需要的所有邁克爾,謝謝! – 2011-06-16 18:25:05

+0

@邁克爾我們可以從陣列移除像'4'特定的值,只有一個用'未設置()' – Rafee 2012-01-02 11:39:08

+1

@Rafee你的意思是一個'未設置()刪除多個值'?如果是這樣,你可以使用'array_diff()'返回一個沒有你想要刪除的值的新數組。 – 2012-01-02 15:22:12

2

它們就像它們一樣。一個關鍵是剛刪除

+0

偉大的,成因。謝謝! – 2011-06-16 18:25:35

4

它自己的測試,但這裏的輸出。

php -r '$a=array("a","b","c"); print_r($a); unset($a[1]); print_r($a);' 
Array 
(
    [0] => a 
    [1] => b 
    [2] => c 
) 
Array 
(
    [0] => a 
    [2] => c 
) 
2

該鍵消失,不管它是否爲數字。試試下面的測試腳本。

<?php 
    $t = array('a', 'b', 'c', 'd'); 
    foreach($t as $k => $v) 
     echo($k . ": " . $v . "<br/>"); 
    // Output: 0: a, 1: b, 2: c, 3: d 

    unset($t[1]); 

    foreach($t as $k => $v) 
     echo($k . ": " . $v . "<br/>"); 
    // Output: 0: a, 2: c, 3: d 
?> 
1

這可能是有點斷章取義,但在解封值從全球陣列,由邁克爾·Berkowski應用上面,但與$GLOBALS,而不是你global $variable_name聲明的全局值使用的答案。因此,這將是這樣的:

unset($GLOBALS['variable_name']['array_key']);

相反的:

global $variable_name; unset($variable_name['array_key']);

NB:這隻有你使用全局變量。

0

的鍵保持了與刪除鍵失蹤,但他們可以通過這樣做來重新排列:

$array = array(1,2,3,4,5); 
unset($array[2]); 
$arranged = array_values($array); 
print_r($arranged); 

輸出:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 4 
    [3] => 5 
) 

注意到,如果我們做不重新安排如下:

unset($array[2]); 
$array[]=3; 

3將5,因爲它會被推動到所述陣列的端部的值的索引並且不會嘗試檢查或替換缺失的索引。在使用索引訪問的FOR LOOP時,這一點很重要。