人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

(PHP)連想配列で複数のvalueを指定したい。

「人物名」キーに「身長・体重・座高」という3つのvalueを指定したいです。
$person = array (
"斎藤さん" => "175",
"佐藤さん" => "170",
"高橋さん" => "165"
);
一般的に解説されている連想配列では、このようにひとつのvalueしか指定することができません。
できる方法はありますか? またその場合、値の取り出し方はどのように行いますか?

●質問者: pocapontas
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● siseiall

http://web-items.blog.so-net.ne.jp/2012-09-22
php]C言語のような構造体をつくる

これみてください。全部のってます。

1、クラス(≒構造体)をつくる。
2、そのクラスの配列を作る

がんばってください。


2 ● a-kuma3
ベストアンサー

入れ子にできます。
連想配列の内側に、また連想配列です。

<?php

$person = array(
 '斎藤さん' => array( '身長' => '175', '体重' => '60', '座高' => '85'),
 '佐藤さん' => array( '身長' => '170', '体重' => '70', '座高' => '80'),
 '高橋さん' => array( '身長' => '165', '体重' => '80', '座高' => '82') 
);

print_r($person);
print($person['佐藤さん']['体重'])
?>

pocapontasさんのコメント
ご返信ありがとうございます。 連想配列の中に連想配列を入れる記述は初めてみました。助かりました!

a-kuma3さんのコメント
「それを何と呼ぶのか」が分からないと、検索もままならないですよね。 今回のは「入れ子」がキーワードだったかも。 [https://www.google.co.jp/search?num=100&safe=off&hl=ja&q=php+%E9%80%A3%E6%83%B3%E9%85%8D%E5%88%97+%E5%85%A5%E3%82%8C%E5%AD%90:title=php 連想配列 入れ子 - Google 検索] こんなキーワードでも、それなりに引っかかる。 [https://www.google.co.jp/search?q=php+%E9%80%A3%E6%83%B3%E9%85%8D%E5%88%97%E3%81%AE%E4%B8%AD%E3%81%AB%E9%80%A3%E6%83%B3%E9%85%8D%E5%88%97:title=php 連想配列の中に連想配列 - Google 検索] [https://www.google.co.jp/search?q=php+array+%E3%81%AE%E4%B8%AD%E3%81%AB+array:title=php array の中に array - Google 検索] Google の検索結果で引っかかったページを見てみると「多次元配列」という書き方をしてる人も多いようだけど、それは違うなあ。

3 ● ぽけっとしすてむ
<?php
$person=[
"斎藤さん" => ["身長" => 160,"体重" => 60,"座高" => 100],
"佐藤さん" => ["身長" => 170,"体重" => 61,"座高" => 101],
"高橋さん" => ["身長" => 180,"体重" => 62,"座高" => 102]
];
var_dump($person);
echo $person['佐藤さん']['身長'];
echo "<br>\n";
echo $person['高橋さん']['座高'];

古いPHPを使わない という心構えで書くと、このような使い方が便利です。

http://php.net/manual/ja/language.types.array.php

array (size=3)
 '斎藤さん' => 
 array (size=3)
 '身長' => int 160
 '体重' => int 60
 '座高' => int 100
 '佐藤さん' => 
 array (size=3)
 '身長' => int 170
 '体重' => int 61
 '座高' => int 101
 '高橋さん' => 
 array (size=3)
 '身長' => int 180
 '体重' => int 62
 '座高' => int 102

170
102

a-kuma3さんのコメント
PHP 界隈では、その「短縮構文」ってやつの扱いはどうなってるんでしょうね。 array の方ではないんですが、いつも不思議に思うのは、 >|| <?=$foo?> ||< が使われずに、 >|| <?php echo $foo ?> ||< が使われること(「タグ」という呼び方さえされて)。 JSP だと、その短縮構文に該当するのは「式」の >|| <%= foo %> ||< もしくは、「EL式」の >|| ${foo} ||< を使わずに、 >|| <% out.println(foo); %> ||< って書くと、変態って呼ばれそうです <tt>:-)</tt> とりあえず、deprecated が付くまでは、多勢に合わせるのが無難かなと思ったりします。

ぽけっとしすてむさんのコメント
界隈の事は、コアな方の意見を参考にしてもらう様にして頂ければと思います。 「古いPHPを使わない という心構え」は、例えば5.4.x未満でこの書き方をした場合エラーになりますが、書き方を直すより環境を更新して安全で便利な環境にした方が良いですよね。という個人の見解となります。 また、PHPは同じ動作でも様々な書き方があるので、フレームワーク等のルールに沿うかマニュアルにある書き方で良いとも思います。 #arrayはdeprecatedになる事はまず無いですが、古い環境は更新しなければなりません

pocapontasさんのコメント
>> ぽけっとしすてむ 様 ご返信ありがとうございます。 [ ] でくくるやり方もできるのですね。参考になります!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ