string 'first' (length=5) 'first' => array (size=1) "> string 'first' (length=5) 'first' => array (size=1) "> string 'first' (length=5) 'first' => array (size=1) " />

PHP多次元配列 - 第2次元が最初の値を上書きする

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

$ 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。

0

2 答え

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

$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 のマニュアルのどこかで説明されていると思います。

2
追加された
ジョシュ、ありがとう。あなたの説明は大いに役立ちます。私はあなたが説明したことが起こっていたが、理由を知らなかったという結論に達しました。ですから、私が望むのは、$ row ['Field']という列名を保持する2次元配列を構築し、次に2行目の$ row ['Key']の値です:array( "フィールド "=>" column_one "、配列(0 =>" PRI "))キーは主キーとなります。私はこれは、テーブルのすべての列が "キー"列にプライマリキーのPRIが含まれているエントリ "フィールド"の複数の行としてこの配列に格納されているので、これができるように思えます。
追加された 著者 Mike Morris,
ジョシュ、これを考えてくれてありがとう。私がコード化してから数年経ちましたが、私の心はデータが壊れているようです。
追加された 著者 Mike Morris,

これは、PHPの任意の文字列を配列のように扱うことができるからです

$test = "Hello, World";
echo $test[0];

「H」がエコーされます。コードを書いていること

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

$ field_names [$ f]という文字列の最初の文字を$ row ['Key']に置き換えます。しかし、私たちが置き換えているのは1文字だけなので、PHPは$ row ['Key']の最初の文字を使って "Pield_name"を取得し、PRIの "P"を最初の "F" 「文字列配列」内の位置

しかし、私はあなたがしたいことにまだ混乱しています。 $ row ['Key']を挿入(?)した後に、配列を見たいものをマップすることができたら、私はコードであなたを助けることができます

編集: トップコードが機能する理由は、配列に追加する最初のアイテムのキーを指定していないためです。

$arr[]="first"; //Inserts string "first" at pos 0 of array same as $arr[0]="first";
$arr['first'][]=$somearr['some']; //Inserts array into $arr using key 'first'

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

このコードでも同じことが達成できました

$arr =array(
    0       => 'first',
    'first' => $somearr['some'] 
)
1
追加された
@ user1105258あなたはその考えを完了できますか? 2次元配列をどのように見たいかのコードスニペットを渡す前に、Enterキーを押したと思います
追加された 著者 JoshStrange,
笑それは私たちの最高に起こる、うれしい私は助けることができます!
追加された 著者 JoshStrange,
ジョシュ、ありがとう。あなたの説明は大いに役立ちます。私はあなたが説明したことが起こっていたが、理由を知らなかったという結論に達しました。だから私が望むのは、$ row ['Field']の値を保持する2次元配列を作成し、次に2番目の次元で$ row ['Key']の値を持つことです。
追加された 著者 Mike Morris,
ジョシュ、おそらく私はここで森林を見ていない。私の目標は、指定されたテーブルのすべてのフィールドを含む$ field_names配列を、どのテーブルが主キーであるかの表示とともに返すことです。私はそれをあまりにも複雑にしていますか?
追加された 著者 Mike Morris,
Gaaa!私は私の愚かさから回復しました。 $ field_names [$ f] = array($ row ['Field']、$ row ['Key']);配列(サイズ= 142)0 =>配列(サイズ= 2)0 =>文字列 'nation_id'(長さ= 9)1 =>文字列 'PRI'(長さ= 3)
追加された 著者 Mike Morris,
ありがとう、ジョシュ!
追加された 著者 Mike Morris,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com