ホームページ >バックエンド開発 >PHPの問題 >連想配列を削除した後に PHP が並べ替える

連想配列を削除した後に PHP が並べ替える

WBOY
WBOYオリジナル
2023-05-06 13:16:07632ブラウズ

PHP 配列操作を実行する場合、配列の追加、削除、変更が必要になることがよくあります。配列要素を削除すると、配列の内部順序が変更される可能性があり、foreach ループを使用して配列を走査すると、予期しない結果が発生する可能性があります。この記事では、連想配列の要素を削除して並べ替えることにより、要素の削除によって引き起こされるトラバーサルの問題を回避する方法を紹介します。

まず、PHP の配列型を見てみましょう。

PHP には、インデックス付き配列と連想配列の 2 種類の配列があります。インデックス付き配列は 0 から始まる整数インデックス付きの配列ですが、連想配列は文字列をキーとして使用します。以下は連想配列の例です。

$students = [
    'Tom' => 75,
    'Jerry' => 82,
    'Alice' => 95
];

この配列では、各要素に文字列キー名と対応する値があります。

次に、連想配列 $students から要素を削除する方法を考えます。これは、unset() 関数を使用して実現できます。

unset($students['Jerry']);

このようにして、$students 配列内のキー 'Jerry' を持つ要素を削除できます。 。

ただし、この方法で要素を削除すると、配列内の内部順序が変更されるため、配列を走査するときに問題が発生する可能性があります。例:

foreach ($students as $name => $score) {
    echo "$name's score is $score\n";
}

このコードを実行すると、次の結果が得られます:

Tom's score is 75
Alice's score is 95

そして、'Jerry' のスコアは削除されているため出力されません。 。この問題の根本原因は、foreach ループを使用して配列を走査すると、配列の内部順序で処理が進み、unset() 関数が要素を削除した後、配列の内部順序が変更されてしまうことです。

この問題の解決策は非常に簡単です。配列の内部順序によって引き起こされる走査の問題を避けるために、要素を削除した後に配列を再ソートするだけです。 PHP では、uasort() 関数を使用して、連想配列を値で並べ替えることができます。この関数の使用法は次のとおりです。

uasort($array, function($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});

uasort() 関数の最初のパラメータは並べ替える配列で、2 番目のパラメータは 2 つの値を比較するために使用されるコールバック関数です。上記のコードでは、無名関数を使用してコールバック関数を定義し、$a$b のサイズを比較して、対応する比較結果を返します。

上記のコードを使用して $students 配列を並べ替えると、次の結果が得られます。

Alice's score is 95
Tom's score is 75

これで、連想配列の削除によって引き起こされる問題を回避できました。配列要素のトラバーサル問題。

完全なサンプル コードは次のとおりです。

$students = [
    'Tom' => 75,
    'Jerry' => 82,
    'Alice' => 95
];

unset($students['Jerry']);

uasort($students, function($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});

foreach ($students as $name => $score) {
    echo "$name's score is $score\n";
}

この記事では、要素の削除によって引き起こされるトラバーサルの問題を回避するために、PHP で連想配列要素を削除した後にその要素を並べ替える方法を紹介します。連想配列をソートすると、配列を走査するときに正しい結果が得られるようになり、プログラミングの安定性と信頼性が向上します。

以上が連想配列を削除した後に PHP が並べ替えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。