PHPで配列のキーを変更する方法について
- PHPで配列のキーを変更する方法について教えてください。
- 配列のキーをループ処理を行い、defineで設定したキー名に変更したいです。
- 具体的なプログラムの書き方を教えてください。
- ベストアンサー
defineについて
Array('0'=>'1234', '1'=>'太郎', '2'=>'20', '3'=>'TOKYO' ) この配列を以下のdefineで設定したkeyの名前に変更したいと考えています。 ---define.php--- <?php define("KEY_0", "ID"); define("KEY_1", "NAME"); define("KEY_2", "AGE"); define("KEY_3", "FROM"); ?> ---こんな形にしたい--- Array('ID'=>'1234', 'NAME'=>'太郎', 'AGE'=>'20' 'FROM'=>'TOKYO' ) ---プログラム--- <?php require_once('define.php'); for($i=0;$i<4;$i++){ /* うまくループさせてkeyを変更したいんですが どのような処理をしたらよいでしょうか?? */ } ?> 何か良い方法があれば教えていただきたいです。お願いします。
- tadao1213
- お礼率38% (8/21)
- PHP
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
以下でご希望の形式のデータが得られると思います。 // 元の配列 $a1、出力 $a2 foreach ($a1 as $k => $v) { $a2[constant("KEY_$k")] = $v; } print_r($a2);
関連するQ&A
- 多次元配列で特定キーが重複している箇所をランダムで
PHP多次元配列で特定キーが重複している箇所をランダムで1つだけ表示したい ・id基準 ■元配列 Array ( [0] => Array ( [id] => 5 [name] => "佐藤" [age] => 5 ) [1] => Array ( [id] => 5 [name] => "伊藤" [age] => 7 ) [2] => Array ( [id] => 5 [name] => "鈴木" [age] => 12 ) [3] => Array ( [id] => 8 [name] => "山田" [age] => 17 ) [4] => Array ( [id] => 8 [name] => "奈良" [age] => 2 ) ■取得したいランダム結果配列例1 Array ( [0] => Array ( [id] => 5 [name] => "佐藤" [age] => 5 ) [3] => Array ( [id] => 8 [name] => "山田" [age] => 17 ) ■取得したいランダム結果配列例2 Array ( [1] => Array ( [id] => 5 [name] => "伊藤" [age] => 7 ) [4] => Array ( [id] => 8 [name] => "奈良" [age] => 2 ) ※1次元目のキーは元キーを維持していなくても構いません
- ベストアンサー
- PHP
- define定義について
■kconf.php <?php $script_neme = "sendmail.php"; ?> ■mail.php <?php require_once("conf.php"); $form = <<<EOM {$setcomments} <form action="{$script_name}" method="post"> ・ ・ ・ ・ EOM; ?> ↓↓↓↓ 以下のように定義すると フォームのソースが <form action="{SENDMAIL}" method="post">のままで送信できません。 $による定数定義ではうまくいくのですがどうしてでしょか? アドバイス下さい。 ■kconf.php <?php define("SENDMAIL", "sendmail.php"); ?> ■mail.php <?php require_once("conf.php"); $form = <<<EOM {$setcomments} <form action="{SENDMAIL}" method="post"> ・ ・ ・ ・ EOM; ?>
- 締切済み
- PHP
- phpでmysqlからの呼び出しについての質問です。
phpでmysqlからの呼び出しについての質問です。 現在mysqlから下記のように値を呼び出し、age=10の条件にあてはまるものだけを3つまで表示させたいと思っています。 $query = "SELECT id, name, birth, age FROM log WHERE age=10 LIMIT 0 , 3"; $hoge = $db->rowset_assoc($query) or $db->error("Query failed $query".__FILE__.__LINE__); foreach($hoge as $row) { $id= $row['id']; $name= $row['name']; $birth= $row['birth']; } $hoge = array( array("$id","$name","$birth"), array("$id","$name","$birth"), array("$id","$name","$birth"), ); 更新の度にシャッフルさせたいのでarrayを使用しているのですが、 これだと3つとも同じ数値が出てきてしまい困っています。 それぞれの値を取り出し、arrayに入れるにはどのようにすれば良いのでしょうか。 宜しくお願い致します。 大文字小文字の使い方については参考資料そのままに作成しましたので おかしい部分があるかもしれません。
- ベストアンサー
- PHP
- 多次元配列で、foreachを使って、key値を
多次元配列で、foreachを使って、key値を入れ替えているのですが、 なんで、こうなるか分かりません。 $x = array(); $x[] = array( "id" => 1, "name" => "JavaScript", ); $x[] = array( "id" => 5, "name" => "PHP", ); $z = array(); foreach($x as $key => $value){ $z[$value["id"]] = $value; } print_r($z); 配列のKEYをIDに変更しているのですが、 なんで、こうなるのでしょうか? 特に、 $z[$value["id"]] = $value; が分かりません。 例えば、foerachの途中で、var_dumpすると、 1回目だと、 ◆$key 0 ◆$value Array ( [id] => 1 [name] => JavaScript ) ◆$value["id"] 1 まではいいのですが、 ◆$z[$value["id"]] の値が見れません。 ここはどんな処理をやっているのでしょうか?
- ベストアンサー
- PHP
- カンマを削除
IDとNAMEがあり、値は以下になります。 ID NAME 1 西武 2 巨人 3 ソフトバンク そのIDとNAMEを取得し、NAMEについてはカンマ区切りで連結をし、 ID、NAMEはアンカタグを設定します。 NAMEの値をカンマ区切りにしているのですが、NAMEの値の最後にまで カンマが付加されてしまいます。 西武,巨人,ソフトバンク, ←ココ カンマ区切りをrtrimで削除出来ると思ったのですが、うまくいきません。 カンマを削除出来る方法または、他に良い方法があればアドバイス頂けないでしょうか。 以上、よろしくお願い致します。 for($i = 0; $i<10;$i++){ $array[i] = array("ID".[$i] => "NAME".[$i]); } foeach($array as $key => $value){ foreach($value as $id => $name){ <a href="aaa.php?id=$key">$name.","</a> } }
- ベストアンサー
- PHP
- 変数の保持
変数の保持 1.PHP $pst=$_POST; if(is_array($pst)){ foreach($pst as $key => $value) {$$key=$value;global $$key;} } if($action==""){ require_once 'index.html'; } elseif($action=="login2"){ require_once 'top.html'; } elseif($action=="top2"){ require_once 'top2.html'; } **.html <form method="post" action="1.php"> <input type="hidden" name="action" value="login2"> <input type="text" size="10" name="uusid"> <input type="submit" value="submit"> </form> htmlはすべてのページでform記述です。 例として、5ページある場合に、現在のところ、$uusidを5ページ目まで保持できないのですが、どうしたらいいのでしょうか? もしかして、グローバル関数化は可変変数ではできなかったんでしょうか? ・1p目:$uusid入力 ・2p目:print($uusid);で確認 ・3p目:<?=$uusid?>を使用するも消えてる
- ベストアンサー
- PHP
- foreachで多次元配列を生成
こんにちわ。 配列をforeachでループさせて、それを多次元配列に入れていくことは可能でしょ うか? 例えば以下のようなデータがあるとします。 ---meibo.dat-------- c21<>田中<>21<>東京 c22<>佐藤<>22<>大阪 -------------------- ---test.php----------------------------------------------------- <? $list_meibo = file("meibo.dat"); foreach($list_meibo as $temp){ $i=split("<>",$temp); $a=array($i[0] => array("name"=>$i[1],"age"=>$i[2],"ad"=>$i[3]),); } ?> ------------------------------------------------------------------- これでは $a=array("c21"=>array("name"=>"田中","age"=>"21","ad"=>"東京"), "c22"=>array("name"=>"佐藤",age"=>"21","ad"=>"大阪"),); という具合になってくれないでしょうか? これでいくと、配列の最後の要素のみデータに残ります。 どのようにしたらよいでしょうか? ご教授お願いします。
- ベストアンサー
- PHP
- 呼び出し先にさらに呼び出しがある場合について
PHPバージョン5.2.4を使っています。 index.phpからdir1ディレクトリにあるfile1.phpをrequireして使いたいのですが、 file1.phpもdir1ディレクトリにあるfile2.phpをrequireしているので 次のような呼び出し方ならうまく作動するのですが、 [index.php] define('DIR', realpath(dirname(__FILE__))); require_once 'dir1/file1.php'; [dir1/file1.php] require_once DIR.'/file1.php'; [dir1/file2.php] print "file2表示"; 次のようにindex.phpをdir1ディレクトリに移動させて実行すると file1.phpのrequireでエラーが出てしまいます。 [dir1/index.php] define('DIR', realpath(dirname(__FILE__))); require_once 'dir1/file1.php'; このような呼び出し先の中にさらに別の呼び出しがある場合は どのように記述すればindex.php(実行するファイル)を 別のどんな場所に移動させても作動させることができるのでしょうか?
- ベストアンサー
- PHP
- 基本的なSQL文
とても基本的なことだと思うのですが、以下のようなテーブルがあるとします。 create table test ( id numeric primary key, name varchar(45), age numeric ); これに例えば以下のようにデータを詰めたとします。 +----+----------+------+ | id | name | age | +----+----------+------+ | 1 | takeshi1 | 50 | | 2 | takeshi2 | 25 | | 3 | takeshi3 | 30 | | 4 | takeshi4 | 35 | | 5 | takeshi5 | 40 | | 6 | takeshi6 | 45 | +----+----------+------+ ここで最年少のレコードを取り出したいだけなのですが mysql> select id, name, min(age) from test;とすると +----+---------+----------+ | id | name | min(age) | +----+---------+----------+ | 1 | takeshi1| 25 | +----+---------+----------+ 年は最年少が取り出されますがidとnameは一行目が取り出されているようです。どのようなSQLを書けば以下のようになるのでしょうか。 +----+---------+----------+ | id | name | min(age) | +----+---------+----------+ | 2 | takeshi2| 25 | +----+---------+----------+
- ベストアンサー
- MySQL
- smartyのdifineについて
表示するファイルにdefineにてパスを設定すると正常に 表示されるのですが管理が面倒なので別のファイルに defineにてパスを設定するとエラーになってしまいます。 具体的には以下のソースです。 ---Smarty/libs/path.php--- define ('SMARTY_LIBS_DIR', 'C:/Program Files/xampp/htdocs/Smarty/libs/'); ---Smarty/libs/MySmarty.class.php--- require_once dirname(__FILE__) . '/Smarty.class.php'; require_once dirname(__FILE__) . '/path.php'; ---Smarty/index.php--- require_once SMARTY_LIBS_DIR . 'MySmarty.class.php'; 調べてみたのですが表示するファイルに指定する方法しか みつからなかったのですが別ファイルから指定する事は 無理なのでしょうか?
- 締切済み
- PHP
お礼
constant()を使うとkey_0~3の値が取れるんですね。勉強になりました。ありがとうございます!!