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';
というふうにしたいと考えています。

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

回答の条件
  • 1人1回まで
  • 登録:2008/12/18 20:01:06
  • 終了:2008/12/19 07:14:33

回答(3件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/12/18 21:12:18

ポイント30pt

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

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

foreach (range('a', 'e') as $ch) {
    $arr2[$ch] = 'hoge';
}
print_r($arr2);
id:worldtravel

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] に値を入れたいと考えています。

よろしくお願いします。

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

2008/12/18 22:32:01
id:den2sn No.2

den2sn回答回数14ベストアンサー獲得回数52008/12/19 00:28:22

ポイント30pt

こんな感じでしょうか。

$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);
id:worldtravel

ありがとうございます。

2008/12/19 07:08:48
id:GoldenDawn No.3

GoldenDawn回答回数426ベストアンサー獲得回数812008/12/19 01:23:52

ポイント30pt

$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>' ;
?>
id:worldtravel

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

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

すいません。

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

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

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

2008/12/19 07:13:47
  • id:pahoo
    入力値が
    (1) 1,2,3,4,5,hoge
    (2) a,b,c,d,e,hoge
    ということですか?

    (1)については、入力値が
    1,2,3,hoge
    になったり、
    1,2,3,4,5,6,7,8,9,hoge
    と可変ということですね。
    1,3,6,hoge
    のようになったり、値が10以上になったり、0や負数になりますか?
  • id:worldtravel
    すいません、hogeはおかしな書き方をしてしまいました。

    入力値は、というよりは
    --------------------
    1,2,3,4,5(tab)a
    1,2,3,4,5,6,7,8(tab)b
    1,2,3(tab)c
    1,1,1,1(tab)d
    a,b,x,z(tab)e
    --------------------
    というようになっているtsvのデータファイルを読み込んで
    $array[1][2][3][4][5] = 'a';
    $array[1][2][3][4][5][6][7][8] = 'b';
    $array[1][2][3] = 'c';
    $array[1][1][1][1] = 'd';
    $array['a']['b']['x']['z'] = 'e';

    というようにしたいのです。

    最初からこう書けば良かったですね。
    すいません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません