- ベストアンサー
PHP多次元配列で特定キーが重複している箇所をランダムで表示したい
wave117の回答
function array_rand_each_group(array $arrays,$column){ $res = []; shuffle($arrays); foreach($arrays as $array){ $res[$array[$column]] = $array; } return $res; } $arrays = [ ['id' => 5, 'name' => '佐藤', 'age' => 5], ['id' => 5, 'name' => '伊藤', 'age' => 7], ['id' => 5, 'name' => '鈴木', 'age' => 12], ['id' => 8, 'name' => '山田', 'age' => 17], ['id' => 8, 'name' => '奈良', 'age' => 2], ]; print_r(array_rand_each_group($arrays,'id'));
関連するQ&A
- 多次元配列の入れ替え
いつもお世話になります。 PHPで多次元配列の入れ替えについて悩んでおります。 以下のようなデフォルトの配列から、整形後の配列 へ変換したいのですが、どのように扱ってよいか 頭が回らず困っています。 2次元目のクラスが等しいもののidをキーとして、 名前を値としたいのですが。。。 どうぞ宜しくお願いします(>へ<) //デフォルトの配列 Array ( [0] => Array ( [id] => 1 [class] => A [name] => 佐藤 ) [1] => Array ( [id] => 2 [class] => A [name] => 山下 ) [2] => Array ( [id] => 3 [class] => B [name] => 田中 ) [3] => Array ( [id] => 4 [class] => B [name] => 高橋 ) ) //整形後の配列 Array ( [A] => Array ( [1] => 佐藤 [2] => 山下 ) [B] => Array ( [3] => 田中 [4] => 高橋 ) )
- ベストアンサー
- 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
- 多次元配列を2次元の連想配列で表したい
PHP初心者です。 $category = array( array( 'ライフ' ), array( 'デジタルライフ', array( '携帯・PHS' ), array( 'ワンセグ放送' ) ), array( '趣味', array( 'AV機器', array( 'オーディオ' ), ), ), ); このような多次元配列を $new_category = array( array( 'id'=> '1', 'parent_id' => '-', 'name' => 'ライフ', ), array( 'id'=> '2', 'parent_id' =>'-', 'name' => 'デジタルライフ', ), array( 'id'=> '3', 'parent_id' => '2', 'name' => '携帯・PHS', ), array( 'id'=> 4, 'parent_id' => '2', 'name' => 'ワンセグ放送', ), array( 'id'=> 5, 'parent_id' => '-', 'name' => '趣味', ), array( 'id'=> '6', 'parent_id' => '5', 'name' => 'AV機器', ), ); このような二次元配列に変換したいです。 parent_idを入れておく配列を作って、階層が深くなったら前の要素のIDを配列に入れ、浅くなったら配列の末尾の要素を消去する…みたいなことを考えてあれこれやってみたのですが、なかなかうまくいきません。 何か良い方法がありましたら、教えていただけるとありたがいです。 よろしくお願い致します。
- ベストアンサー
- PHP
- 2次元配列の値の受け渡しについて教えてください
お世話になります。 phpで2次元配列の値の受け渡しについて教えてください。 A.phpファイルからB.phpファイルに2次元配列の値を渡したいと考えています。 出来ればPOSTで2次元配列を送りたいと考えていますが、そもそもPOSTで2次元配列を送ることはできるのでしょうか? たとえば [A.php] $DATA = array( array('name'=>"tanaka", 'age'=>"20"), array('name'=>"sasaki", 'age'=>"30"), ); をB.phpファイルに送るにはどうすれば良いのでしょうか? どなたか教えて頂けないでしょうか? よろしくお願いします。
- ベストアンサー
- 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
- 多次元配列の重複削除
以下のような配列がある時、重複している奈良を1つにしたい Array ( [0] => Array ( [area_id] => 13 [area] => 兵庫 ) [1] => Array ( [area_id] => 4 [area] => 沖縄 ) [2] => Array ( [area_id] => 15 [area] => 愛媛 ( [0] => Array ( [area_id] => 22 [area] => 奈良 ) [1] => Array ( [area_id] => 3 [area] => 群馬 ) [2] => Array ( [area_id] => 22 [area] => 奈良 ) [3] => Array ( [area_id] => 22 [area] => 奈良 ) ) ) )
- ベストアンサー
- PHP
- 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
- phpの二次元配列の値をランダムに取得したい
ちょっとわからないことがありますので、質問させて頂きます。MYSQLから取得したデータ(二次元配列)から、ランダムに値を10件取得したいと思っております。 実際、DBにクエリを投げる段階で、 "select id,name,description from teble order by rand()" をしても、そのテーブルにあるデータ全体から取得という感じになってしまいます。 新しく追加されたデータ10件から、ランダムに取得できないので、新しく追加されたデータ10件をまずDBから取得して、php側でその中からランダムに値を取得するしかないのかと思っております。 shuffle();等を使用したのですが、配列のキーをランダムに取得するような形で、その中身を一緒に取得することができません。 考えても私の知識では解決できませんので、お分かりになる方、ご教授くださいますようお願いいたします。
- 締切済み
- PHP
- 多次元配列の重複削除
PHPの多次元配列の重複削除で悩んでいます・・・。 例) array(4) { [0]=> array(2) { ["name"]=>string(10) "春" ["cool"]=>int(0) } [1]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(200) } [2]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(0) } [3]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(200) } } 上記のような配列があった場合 下記のように重複してるものを削除させたいのです・・・。 array(4) { [0]=> array(2) { ["name"]=>string(10) "春" ["cool"]=>int(0) } [1]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(200) } [2]=> array(2) { ["name"]=>string(14) "冬" ["cool"]=>int(0) } } array_unique($array)を使用してもうまく行かず 悩んでおります。。。。 よい方法等あればご教授お願いいたします。
- ベストアンサー
- PHP
- 多次元配列から作った表の重複行をまとめたい
データベースからある期限(14年3月21日から3月30日)で取得した下記の多次元配列から日付に該当するデータがあればセルに値を入れて表を作ったのですが、 <?php $cal=array( array("type" => 19, "name" => "山田", "hour" => 5, "day" => 2014-03-21), array("type" => 19, "name" => "山田", "hour" => 8, "day" => 2014-03-24), array("type" => 19, "name" => "山田", "hour" => 8, "day" => 2014-03-26), array("type" => 19, "name" => "田中", "hour" => 8, "day" => 2014-03-23), array("type" => 19, "name" => "田中", "hour" => 8, "day" => 2014-03-26), array("type" => 19, "name" => "田中", "hour" => 3, "day" => 2014-03-28), array("type" => 20, "name" => "大田", "hour" => 3, "day" => 2014-03-21), array("type" => 20, "name" => "大田", "hour" => 5, "day" => 2014-03-27), array("type" => 20, "name" => "田中", "hour" => 3, "day" => 2014-03-24), array("type" => 20, "name" => "田中", "hour" => 4, "day" => 2014-03-27), array("type" => 0, "name" => "高橋", "hour" => 1, "day" => 2014-03-27), ); ?> <?php foreach ( $cal as $val ) : ?> <tr> <td><?php echo $val['type']; ?></td> <td><?php echo $val['name']; ?></td> <?php for ( $i = 21; $i <= 30; $i ++ ) : ?> <td> <?php if ( $day == $i ) { echo $val['hour']; } ?> </td> <?php endfor; ?> </tr> <?php endforeach; ?> 同じIDと名前の行が複数あり、同じIDと名前の行をひとつにしたいのです(画像参照)がわからず質問させていただきました。よろしくお願い致します。
- ベストアンサー
- PHP
お礼
回答ありがとうございました。 shuffle関数とかあるんですね。 大変参考になりましたー