0

私は通常、Python、Java、または C でコードを作成しています。PHP でプロジェクトに取り組んでおり、PHP の配列について調べていますが、まったく困惑しています。私が正しく理解している場合、PHP の数値インデックスは必ずしも位置に対応するとは限らず、Python の dict のような単なるキーです。したがって、PHP 配列をシャッフルすると、要素の順序は変わりますが、キーは同じままです。したがって、 を呼び出すときにarray[9]、シャッフルが要素をそのように並べた場合、実際には配列の最初の要素を取得している可能性があります。これにより、多くの疑問が生じます。

  • では、PHP 配列は常に何らかの順序付けられたハッシュ テーブルにすぎないのでしょうか? そして、それはオーバーヘッドにとって何を意味するのでしょうか? Python では、リストは従来の配列データ構造のように機能し、辞書はハッシュ構造に沿って機能します。PHPは、すべての値に一意のキーを割り当て、それらの値の順序を追跡することにより、2つを組み合わせているようです. 一定時間のルックアップに連想配列構造を使用したい場合、この順序付けのオーバーヘッドのために、Python 辞書を使用する場合よりもはるかに悪い立場にあるのでしょうか? 配列のみ、またはハッシュテーブルのみの PHP データ構造はありますか?

  • 番号付きの PHP 配列から値を削除するとどうなりますか? 配列がある場合、配列[1, 2, 3, 4, 5]から 4 を削除してから にアクセスしようとする と、キー 3 の要素array[3]を削除したため、エラーが発生しますか?
    または、PHP はそのような場合に何らかのキー
    調整を行いますか?

  • 配列の順序を変更する場合 (つまり、並べ替えまたはシャッフルによって)、 を使用して配列を新しい配列にコピーする位置に
    インデックスを対応させる唯一の方法です。
    array_values()

4

1 に答える 1

2
  1. http://php.net/manual/en/class.splfixedarray.php
  2. このコード:

    $arr = array(0,1,2,3,4);
    unset($arr[3]);
    echo $arr[3];  // undefined index warning, execution continues;
    echo isset($arr[3]) ? $arr[3] : '';
    print_r($arr);
    

    print_r()出力:

    Array
    (
        [0] => 0
        [1] => 1
        [2] => 2
        [4] => 4
     )
    
  3. これは、選択した機能によって異なります。インデックスの関連付けを維持するものもあれば、維持しないものもあります。

ヒント:

  • 一見似ているように見える 2 つの PHP 関数が、互いに同じように動作するとは決して期待しないでください。それはプログラミング言語の「英語」です。他の言語から盗んだがらくたと、互いに矛盾する慣習がたくさんありますが、誰もがそれを話すので、自由列車に飛び乗ってください。

    ムルカ。

于 2013-02-27T16:26:59.160 に答える