$array = array(abc1, abc2, abc3, abc4, abc5);
$aaa1[0] = "あいうえ,かきくけこ,さしすせそ";
$aaa1[1] = "たちつてと,なにぬねの";
$aaa1[2] = "はひふへほ,まみむめも,らりるれろ,わをん";
この条件で、
$abc1[0] = "あいうえ";
$abc1[1] = "たちつてと";
$abc1[2] = "はひふへほ";
$abc1[3] = "";
$abc1[4] = "";
$abc2[0] = "かきくけこ";
$abc2[1] = "なにぬねの";
$abc2[2] = "まみむめも";
$abc2[3] = "";
$abc2[4] = "";
$abc3[0] = "さしすせそ";
$abc3[1] = "";
$abc3[2] = "らりるれろ";
$abc3[3] = "";
$abc3[4] = "";
$abc4[0] = "";
$abc4[1] = "";
$abc4[2] = "";
$abc4[3] = "わをん";
$abc4[4] = "";
$abc5[0] = "";
$abc5[1] = "";
$abc5[2] = "";
$abc5[3] = "";
$abc5[4] = "";
$arrayのインデックス順に入っている名前の変数名の配列のインデックス順に入れるには
どうしたらよいでしょうか。
UTF-8でエンコードされているという前提です。
<?php $array = array(abc1, abc2, abc3, abc4, abc5); $aaa1[0] = "あいうえ,かきくけこ,さしすせそ"; $aaa1[1] = "たちつてと,なにぬねの"; $aaa1[2] = "はひふへほ,まみむめも,らりるれろ,わをん"; //配列の分解と代入 foreach ($aaa1 as $key=>$str) { $arr = preg_split('/,/u', $str); foreach ($arr as $n=>$s) { $var = 'abc' . ($n + 1); ${$var}[$key] = $s; } } //結果を表示 for ($i = 1; $i <= 5; $i++) { $var = 'abc' . $i; echo '$' . $var . ':'; var_dump($$var); } ?>
参考:可変変数
規則性が無くとも対応出来るようにするにはどうしたらよいでしょうか。
以下のようにしてみてください。
<?php $array = array(hoge1, abc2, hoge3, abc4, abc5); $aaa1[0] = "あいうえ,かきくけこ,さしすせそ"; $aaa1[1] = "たちつてと,なにぬねの"; $aaa1[2] = "はひふへほ,まみむめも,らりるれろ,わをん"; //配列の分解と代入 foreach ($aaa1 as $key=>$str) { $arr = preg_split('/,/u', $str); foreach ($arr as $n=>$s) { ${$array[$n]}[$key] = $s; } } //結果を表示 foreach ($array as $var) { echo '$' . $var . ':'; var_dump($$var); } ?>
<?php function compact_matrix($names, $csv) { $cells = array(); foreach ($csv as $row) $cells[] = explode(',',$row); $map = array(); foreach ($names as $id => $name) { $col = array(); foreach ($cells as $cell) $col[] = $cell["$id"]; $map["$name"] = $col; } return $map; } function array_dump($name) { foreach ($GLOBALS["$name"] as $id => $value) { echo '$'.$name.'['.$id.'] = "'.$value.'";'."\n"; } echo "\n"; } $array = array('abc1', 'abc2', 'abc3', 'abc4', 'abc5'); $aaa1[0] = "あいうえ,かきくけこ,さしすせそ"; $aaa1[1] = "たちつてと,なにぬねの"; $aaa1[2] = "はひふへほ,まみむめも,らりるれろ,わをん"; extract(compact_matrix($array, $aaa1)); array_dump('abc1'); array_dump('abc2'); array_dump('abc3'); array_dump('abc4'); array_dump('abc5'); ?>
処理内容がよく理解出来ていませんが書いてみました。
名前から変数を生成する方法として$$nameがありますが連想配列からextractする方法もあります。
http://jp2.php.net/manual/ja/function.extract.php
(注:意図せずローカル変数を書き換えてしまうのでセキュリティーなど使用には注意が必要です。)
$csv($aaa1)を,で区切って二次元の配列$cellsを作ります。
次に$namesで順にcellsの$id番目の要素を全て取り出し$colに追加していきます。
$mapには連想配列で$colを追加していきます。
それをextractでローカル変数に展開しています。
結果が一部($abc4[2])異なります。また空文字の部分は実際はNULLです。
array_dumpはvar_dumpやprint_rでは綺麗に出力できなかったため新た
に書いたもので処理には関係ありません。
$abc1[3]や$abc1[4]は出力されません。必要なら
$aaa1[3] = "";
$aaa1[4] = "";
を追加して下さい。
回答ありがとうございます。
頂いたコードですと、
$array = array(abc1, abc2, abc3, abc4, abc5);
$array = array(hoge1, abc2, hoge3, abc4, abc5);
と言った規則性が無い場合には対応できません。
規則性が無くとも対応出来るようにするにはどうしたらよいでしょうか。