PHPで多次元配列を一度に処理する方法
- PHPで多次元配列を一度に処理する方法を紹介します。
- 多次元配列のすべての要素に同じ処理を施すには、foreachのなかにforeachを書いて処理する方法があります。
- また、ファイルを一度に処理する方法もあります。
- ベストアンサー
PHPで多次元配列を一度に処理するには
例えば、 array( [hoge1-1] => hoge1-1_value [hoge1-2] => array( [hoge2-1] => hoge2-1_value [hoge2-2] => hoge2-2_value [hoge2-3] => array( [hoge3-1] => hoge3-1_value ) ) ) のような多次元配列で、すべてのvalueに同じ処理を施すには foreachのなかにforeachを書いて処理するしかないのでしょうか。 もっと単純に、すべてのファイルを一度に処理できるようにする方法は ないでしょうか?
- yuzuru0024
- お礼率86% (557/646)
- PHP
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
どんな処理か分かりませんが、 再帰構造をもつようなclassなりfunctionを作って、そいつにぶち込んでやればいいだけです。 function foo($param){ if(is_array($param)){//配列かどうか foreach($param as $k => $v){//配列だったらforeachでぶん回す $param[$k]=foo($v);//自分自身を再帰 } }else{//配列じゃない場合、実際に処理させたいことを書く $param = $param.'処理させたい';//ここで、やりたい処理をする } return $param;//返す } $array = foo($array); こんな感じで、配列が続く限り追いかけていきます。 けど、PHPの場合 100回とか200回くらい続く再帰の場合はアホになるのでほどほどに・・・
関連するQ&A
- PHPの多次元配列について
HTMLでホームページを作れる以外はプログラムに関しほぼ素人です。 環境 XAMPP1.70(最新)にてアパッチなど一括ダウンロード PHP言語にて3×4の表で以下の数値を多次元配列にて作成しようと思っているのですが、当方初心者なもので、 以下のコード(細かい部分は省略しています)、特にforeachがネストになっている部分の処理の流れがいまいちよくわかりません ~~~~~~~~~~~~~~~~~~~~~~~~~ <table border=2> <th>都市名</th> <th>最高気温</th> <th>最低気温</th> <?php $data=array( array("東京"32,25) array("名古屋",45,67) array("埼玉",32,67) array("大阪",86,34) ) foreach($data as $city){ print "<tr>"; foreach($city as $value){ print "<td>{$value}</td>" ●1回目foreachからここまでの流れがいまいち分かりません } print "</tr>"; ?> ~~~~~~~~~~~~~~~~~~~~ 一つ目のforeachにて、配列$dataが指定されていますので外側の配列を処理していくと思うのですが、具体的にどういう順番で処理されていくのでしょうか。 またforeach()の中の"$cityが最終的に$valueに格納という形になっていますが、10~13行目のarray("東京",32,25)とどのような関係で処理されていっているのか教えていただけませんでしょうか。 よろしくお願いいたします。
- ベストアンサー
- PHP
- foreachで多次元配列にしたくないのですが……
foreachで多次元配列にしたくないのですが、多次元配列になってしまいます。 なぜでしょうか? ■$hoge Array ( [0] => 3 [1] => 9 ) ■処理 foreach ($hoge as $val){ $result[]= 関数($val); } ■期待している結果 Array ( [0] => Array ( [id] => 1 [created_at] => 2013-08-01 ) [1] => Array ( [id] => 2 [created_at] => 2013-08-02 ) ) ■実際の結果 Array ( [0] => Array ( [0] => Array ( [id] => 1 [created_at] => 2013-08-01 ) ) [1] => Array ( [0] => Array ( [id] => 2 [created_at] => 2013-08-02 ) ) )
- ベストアンサー
- PHP
- 2次元の配列にデータを格納したい
hoge.txtの様なファイルがあって、この値を2次元の配列に格納したいのですが、簡単に実現することは可能でしょうか? open (FILE, "hoge.txt"); foreach (<FILE>) { # この中で、2次元の配列に格納したい } hoge.txt A 1 B 2 C 3
- ベストアンサー
- Perl
- 2次元配列を多次元配列にする。
2次元配列を多次元配列にする。 PHP5で 2次元目はすべて同じキーの2次元配列を 2次元目のキーごとの内容を共通項にまとめて、 多次元配列にする方法を教えてください。 キーの数は膨大なので、関数の再帰呼び出し で、きれいに処理したいのです。 説明文では説明しきれないので、 やりたいことは↓の通りです。 array[0] = array([one] => "あ", [twe] => "う" [three] => "き"); array[1] = array([one] => "あ", [twe] => "う" [three] => "く"); array[2] = array([one] => "あ", [twe] => "え" [three] => "け"); array[3] = array([one] => "あ", [twe] => "え" [three] => "こ"); array[4] = array([one] => "い", [twe] => "お" [three] => "さ"); array[5] = array([one] => "い", [twe] => "お" [three] => "し"); array[6] = array([one] => "い", [twe] => "か" [three] => "す"); array[7] = array([one] => "い", [twe] => "か" [three] => "せ"); という配列があったら、これを↓のようにしたいです。 array( [あ] => array( [う] => array ("き", "く") [え] => array ("け", "こ") ) [い] => array( [お] => array ("さ", "し") [か] => 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
- 3次元配列を1次元配列に
例えば2次元配列だと, array[row*i+j] = a[n]; といったように1次元に直すことができますよね? 同様に3次元配列を1次元配列にしたい場合には arrayの中はどのような式をつかえばいいのでしょうか。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 多次元配列の扱い方
PHPバージョン5.2.4を使っています。 次のような文字列が入っている多次元配列を foreachなどのループを使ってその値を取り出して扱いたいのですが、 取り出した値には配列(二次元以降の値)も含まれてるので 簡単には取り扱いできません・・・ print_rやvar_dumpを使えば値は全て表示されるのですが、 あくまで表示ではなくて値を取り扱いたいのです。 そのようなことができる関数などはあるのでしょうか? $arr[0][0] = 'a'; $arr[0][1] = 'b'; $arr[1] = 'c'; $arr[2][0][0][0] = 'd'; $arr[2][0][0][1] = 'e'; foreach ($arr as $value) { $value//←ここで値を扱いたいけど、配列も含まれてるので・・・ }
- 締切済み
- PHP
- Smarty 三次元配列を使いたい
最近Smartyを使い始めた者です。 以下のような多次元配列を、$smarty->assign('data', $data); します。 $data = array( [0] => array( [id] => 23 [comment] => 'aaa' [name] = array( [0] => 'xxx' [1] => 'yyy' )) [1] => array( [id] => 24 [comment] => 'bbb' [name] = array( [0] => 'zzz' )) [2] => array( [id] => 25 [comment] => 'ccc' [name] = array( [0] => 'ttt' [1] => 'uuu' )) ) そして、以下のようなテーブルを表示させたいのです。 |-------------------| | 23 | aaaa | xxxx | | | |------| | | | yyyy | |-------------------| | 24 | bbbb | zzzz | |-------------------| | 25 | cccc | tttt | | | |------| | | | uuuu | |-------------------| <td>タグのrowspan属性を使おうと思っています。 {foreach}をつかって、以下のようなものを書きましたが、駄目でした。 {foreach from=$data item=value01 name=kiji} <tr> <td rowspan="{$value01.numgoods}">{$value01.id}</td> <td rowspan="{$value01.numgoods}">{$value01.comment}</td> {foreach from=$value01 item=value02 name=goods} {if $smarty.foreach.goods.first} <td>{$value02.name.0]</td></tr> {else} <tr> <td>{$value.name.1}</td> </tr> {/if} {/foreach} {/foreach} エラー表示は、 syntax error: unrecognized tag: $value02.name.0 です 本当は、$value02.name の.0を三次元での要素数分だけ自動でループしてほしいのですが、その書き方がわかりません。 ネットをあさっても、これと言うサイトを見つけれません。 そもそも、三次元目の要素を取得するsmartyの方法がわかりません。 どなたかご教授の程、よろしくお願いいたします。
- ベストアンサー
- PHP
- array(array()); 多次元配列初期化?
$hoge = array(array());で始まっているコードがあるのですが、 これは何をしているのでしょうか? ・多次元配列の初期化? ・$hoge = array();ではダメなのでしょうか?
- ベストアンサー
- PHP
- 多次元配列の並び変えについて
<?php $food["a"]["1"]= "hoge1"; $food["b"]["2"]= "hoge2"; $food["c"]["3"]= "hoge3"; $food["d"]["4"]= "hoge4"; ?> 上記の配列について、1,2,3,4のキーの順番でソートしたいのですが、うまく出来ません。 一次元配列だと簡単なのですが、二次元配列だとどうやったらよいのでしょうか? array_multisortを使うと、多次元でも並び変えはできると他のサイトで読みましたが、 これは結局値でソートしてますよね? 私は純粋にキーのみでソートしたいのですが、色々調べているのですがどうも複雑なプログラムを 書かないとできないような気がしてきました。
- 締切済み
- PHP
お礼
回答ありがとうございます。 関数の中に自らの、関数を入れてループさせる! 思いつきませんでした! 目からうろこです。