23

PHPループを使用していますが、unsetが配列キーにどのように影響するかについて1つの質問がありました。この配列は、PHPによって割り当てられた標準の数値キーを使用します0, 1, 2, 3 etc...unset()配列値で実行するときはいつでも、配列キーはシャッフルされますか、それとも以前と同じように維持されますか?

お時間をいただきありがとうございます。

4

6 に答える 6

42

キーはシャッフルされたり、番号が付け直されたりしません。unset()キーは単に削除され、他のキーは残ります。

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

Array
(
    [0] => 1
    [1] => 2
    [3] => 4
    [4] => 5
)
于 2011-06-16T18:24:38.077 に答える
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
)
于 2011-06-16T18:25:24.463 に答える
2

彼らはそのままです。その1つのキーは削除されただけです

于 2011-06-16T18:24:56.663 に答える
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
?>
于 2011-06-16T18:26:32.583 に答える
1

これは少し文脈から外れているかもしれませんが、グローバル配列から値を設定解除する場合は、上記のMichael Berkowskiによる回答を適用しますが、で$GLOBALS宣言したグローバル値の代わりにを使用しますglobal $variable_name。したがって、次のようになります。

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

それ以外の:

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

注意:これは、グローバル変数を使用している場合にのみ機能します。

于 2013-01-28T11:04:33.420 に答える
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になります。これは、配列の最後にプッシュされ、欠落しているインデックスをチェックまたは置換しようとしないためです。これは、インデックスアクセスでFORLOOPを使用するときに覚えておくことが重要です。

于 2018-02-12T21:44:47.903 に答える