PHP多次元配列 – 第2次元が最初の値を上書きする | php,multidimensional-array

私は期待通りに動作するこのコードを持っています:

$ somearr ['some'] = 'value';

$arr[]="first";
$arr['first'][]=$somearr['some'];

echo "
Var dump of arr: " . var_dump($arr);

収率:

array (size=2)
  0 => string 'first' (length=5)
  'first' => 
    array (size=1)
      0 => string 'value' (length=5)

完璧な..

今、私はこれと同じ原則を適用しようとしています:

function get_field_names($database, $table){



$show_statement = "DESCRIBE `" . $database . "`.`" . $table . "`";

$column_result = mysql_query($show_statement);






        if (mysql_num_rows($column_result) > 0) {



            $f = 0;
            while ($row = mysql_fetch_assoc($column_result, MYSQL_ASSOC)) {



                $field_names[$f] = $row['Field'];

                if ($row['Key'] != ""){



                $field_names[$f][0] = $row['Key'];

                }

                $f++;


            }       

            }



    return $field_names;

}

しかし、配列$ field_names [$ f] [0]に$ row
[‘Key’]の値を使用して2番目の次元を作成する代わりに、$ field_names [$
f]の文字列の最初の文字を最初の文字で上書きします$ field_names [$ f]に
“field_name”という文字列が含まれ、$ field_names [$ f] [0] = $ row [‘Key’]の後に$
row [‘Key’ ] == “PRI”、私は得ます: “Pield_name”。

私は配列$行を誤解していると確信していますが、私は円で始めています。あなたが私の問題を指摘した後、私の愚かさのために私に火を下さい。
TIA。

ベストアンサー

これは元の例を見直すことで簡単に説明できます:

$arr[]="first";
$arr['first'][]=$somearr['some'];

これはあなたが思っていることをしません。最初の行は新しい配列キー first
を作成しません。インデックスされたエントリ [0] に値を割り当てます。
しかし、2行目は英数字キー [first] に値を割り当てます。これは $ arr
配列の2つの異なるサブエントリです。

2番目の例では、値を上書きしています:

$field_names[$f] = 'string...';

$field_names[$f][0] = 'something else...';

[$ f]
キーでは、1つの配列エントリしか持てません。文字列と配列の共有スポットを持つことはできません。

ここで実際に起こるのは、2行目が 'string ...'
の最初の配列のようなインデックスに値を割り当てることです。これは、代替の文字列インデックス構文と同等です。

$field_names[$f]{0} = 'something else...';
                 ^
                 |
                 Not an array index. Because a string was here first.

とにかく、エントリを文字列とキーとして共有することはできません。それが全体の話です。 – array
のマニュアルのどこかで説明されていると思います。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です