PHPループを使用していますが、unsetが配列キーにどのように影響するかについて1つの質問がありました。この配列は、PHPによって割り当てられた標準の数値キーを使用します0, 1, 2, 3 etc...
。unset()
配列値で実行するときはいつでも、配列キーはシャッフルされますか、それとも以前と同じように維持されますか?
お時間をいただきありがとうございます。
キーはシャッフルされたり、番号が付け直されたりしません。unset()
キーは単に削除され、他のキーは残ります。
$a = array(1,2,3,4,5);
unset($a[2]);
print_r($a);
Array
(
[0] => 1
[1] => 2
[3] => 4
[4] => 5
)
自分でテストしますが、出力は次のとおりです。
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
)
彼らはそのままです。その1つのキーは削除されただけです
数値であるかどうかに関係なく、キーは消えます。以下のテストスクリプトを試してください。
<?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
?>
これは少し文脈から外れているかもしれませんが、グローバル配列から値を設定解除する場合は、上記のMichael Berkowskiによる回答を適用しますが、で$GLOBALS
宣言したグローバル値の代わりにを使用しますglobal $variable_name
。したがって、次のようになります。
unset($GLOBALS['variable_name']['array_key']);
それ以外の:
global $variable_name;
unset($variable_name['array_key']);
注意:これは、グローバル変数を使用している場合にのみ機能します。
キーは削除されたキーが欠落した状態で維持されますが、次のようにして再配置できます。
$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になります。これは、配列の最後にプッシュされ、欠落しているインデックスをチェックまたは置換しようとしないためです。これは、インデックスアクセスでFORLOOPを使用するときに覚えておくことが重要です。