

今DBに保存されたデータを取り出す勉強をしています。  
しかし、取り出したデータの配列の中から必要な要素だけをうまく取り出すことができません。

[code]

    //DB接続
    $db = mysql_connect('localhost', 'root', 'imagine');
    //テーブル選択
    $table = mysql_select_db($db_name);
    $table = mysql_query('SET NAMES UTF8');
    //テーブルからデータを取り出す
    $table = mysql_query("select id,name,password  from $table_name", $db);
    
    //取得した配列を多次元配列にする
    while($row = mysql_fetch_assoc($table)){
        $array[] = array($row);
    }
    
    print_r($array);
    
[/code]

出力結果が以上のようになっています。

[code]

    (
        [0] => Array
            (
                [0] => Array
                    (
                        [id] => 1
                        [name] =>  tomorrow
                        [password] =>  1234
                    )
    
            )
    
        [1] => Array
            (
                [0] => Array
                    (
                        [id] => 2
                        [name] =>  yesterday
                        [password] =>  4321
                    )
    
            )
    
    )
    
[/code]

この中からtomorrowだけを取り出したいのですが、どうすればいいのでしょうか。

[code]

    $userName = $array["array"][1][0]["name"];
    
[/code]

などと試しているのですが、現状解決することができていません。  
なにかありましたら随時補足いたしますので、よろしくお願いします。

ちなみJSON形式だと以下のようになっています。

[code]

    {"array":[[{"id":"1","name":" tomorrow","password":" 1234"}],[{"id":"2","name":" yesterday","password":" 4321"}]]})
    
[/code]


CC BY-SA 3.0
2015-10-10T15:01:11.360
17507
2015-10-11T00:12:05.773
2015-10-10T18:34:45.687
8000
12470
question
php
phpでの配列の扱い。（要素取り出しなど）

[code]

    $userName = $array["array"][1][0]["name"];
    
[/code]

ではなく、次のように

[code]

    $userName = $array[0][0]['name'];
    
[/code]

してはどうですか。


CC BY-SA 3.0
2015-10-10T15:48:46.820
17510
2015-10-10T18:29:33.073
2015-10-10T18:29:33.073
7290
17507
answer


`$array` の中にさらに `array` という要素があるわけではないので、 `['array']` は不要です。

[code]

    $userName = $array[1][0]['name']; // yesterday
    
[/code]

※JSONを見ると確かに `array` という要素が存在することになっていますが、提示されたPHPコードの `$array`
の構造とは異なります。`echo json_encode($array)` とすると以下のようになるはずです。

[code]

    [[{"id":"1","name":" tomorrow","password":" 1234"}],[{"id":"2","name":" yesterday","password":" 4321"}]]
    
[/code]

* * *

なお、 [`mysql_fetch_assoc()`](http://php.net/manual/ja/function.mysql-fetch-
assoc.php) が返す連想配列は、 `array()` を使わずとも、そのまま配列に要素として追加することができます。

[code]

    while($row = mysql_fetch_assoc($table)){
        $array[] = $row;
    }
    
    $userName = $array[1]['name']; // yesterday
    
[/code]

この場合、`$array` の要素がそのままDBの一行に対応する連想配列になりますから、よりわかりやすいのではないでしょうか。


CC BY-SA 3.0
2015-10-10T19:02:23.467
17517
2015-10-10T19:02:23.467
8000
17507
answer

[code]

    [0] => Array
    
[/code]

これは「配列の０番目に配列が入っていますよ」という意味なので`array`という連想配列名を指定しても取り出せません。  
なので先達の方の言われる通り`$array[0][0]["name"]`で取り出してあげればいいと思います。

ちなみにプログラムの中で、SQL結果を取り出すときに

[code]

    $array[] = array($row);
    
[/code]

とされていますが、これだと無駄に配列を深くしてしまうので、単純に

[code]

    $array[] = $row;
    
[/code]

としてあげれば

[code]

    $array[0]["name"]
    
[/code]

これで取り出せるようになりそうですね。


CC BY-SA 3.0
2015-10-10T19:03:16.127
17518
2015-10-11T00:12:05.773
2015-10-11T00:12:05.773
4236
12720
17507
answer