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

php5について

1,2,3,4,5,hoge => $array[1][2][3][4][5] = 'hoge';
a,b,c,d,e,hoge => $array['a']['b']['c']['d']['e'] = 'hoge';
というふうにしたいと考えています。

早く綺麗なコードを教えてください。
よろしくお願いします。


●質問者: worldtravel
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:hoge コード
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pahoo
●30ポイント

こんな感じでどうでしょう。

$arr1 = array_fill(1, 5, 'hoge');
print_r($arr1);

foreach (range('a', 'e') as $ch) {
 $arr2[$ch] = 'hoge';
}
print_r($arr2);
◎質問者からの返答

pahooさん、いつもありがとうございます。

Array ( [a] => hoge [b] => hoge [c] => hoge [d] => hoge [e] => hoge )

というのを希望しているのではなく

print $array['a']['b']['c']['d']['e'];

としたときに「hoge」と表示されるようにしたいのです。

また、一部訂正なのですが

1、2、3、4、5 というのは 1、2、3 ときもあるし 1、2、3、4、5、6、7、8、9 というときもあります。

そのときに合わせて、

1、2、3、4、5 のときは $array[1][2][3][4][5] に値を入れたく、

1、2、3、4、5、6、7、8、9 のときは $array[1][2][3][4][5][6][7][8][9] に値を入れたいと考えています。

よろしくお願いします。

(, は 、に置き換えています。どちらでも良いのですが...)


2 ● den2sn
●30ポイント

こんな感じでしょうか。

$str = "1,2,3,4,5,hoge";
$splitStr = split(",", $str);
$setStr = array_pop($splitStr);
$arr = array();
$arrChild = &$arr;
foreach ($splitStr as $ch) {
 $arrChild = &$arrChild[$ch];
}
$arrChild = $setStr;
print_r($arr);
◎質問者からの返答

ありがとうございます。


3 ● GoldenDawn
●30ポイント

$array[1][2][3][4][5] = 'a';

$array[1][2][3][4][5][6][7][8] = 'b';

$array[1][2][3] = 'c';

この三つが同時に満たされることは無いですね。同じ値にスカラー値と配列を割り当てることになるので。

そう言うデータが無いとしてのコード例。エラーチェックはしてません。

<?php
$datafile = './data.tsv' ;

$fh = fopen($datafile, 'r') ;
$array = array() ;
while ($l = fgets($fh)) {
 list($c, $d) = explode("\t", chop($l)) ;
 $r = &$array ;
 foreach(explode(',', $c) as $k) $r = &$r[$k] ;
 $r = $d ;
}


echo '<pre>' ;
var_dump($array) ;
echo '</pre>' ;
?>
◎質問者からの返答

> この三つが同時に満たされることは無いですね。

そうですね.....なにやってるんだか.....

すいません。

そもそものやり方を考え直します。

ありがとうございました。

皆さんコードまで書いて頂いたのにすいませんでした。

関連質問


●質問をもっと探す●



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