質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

3回答

1540閲覧

mysqlでとってきたデータを、キーでまとめて最適化する

k4zzk

総合スコア6

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2015/04/01 12:21

編集2015/04/01 13:13

2次元配列で表現された表があります。
mysqlから取得したデータを処理することを想定しています。
例:
array(
[0] => array(
'date' => '2015-01-01',
'place' => 'tokyo',
'time_code' => '1',
'mes' => 'hogehoge1',
'data' => 'span1'
),
[1] => array(
'date' => '2015-01-01',
'place' => 'tokyo',
'time_code' => '2',
'mes' => 'hogehoge2',
'data' => 'span2'
),
[2] => array(
'date' => '2015-01-01',
'place' => 'osaka',
'time_code' => '1',
'mes' => 'hogehoge3',
'data' => 'span3'
),
[3] => array(
'date' => '2015-01-02',
'place' => 'tokyo',
'time_code' => '1',
'mes' => 'hogehoge4',
'data' => 'span4'
),
[4] => array(
'date' => '2015-01-02',
'place' => 'tokyo',
'time_code' => '2',
'mes' => 'hogehoge5',
'data' => 'span5'
),
)

これをある値をキーとしてソートし、まとめて、最適化したいのです。
関数のapiは以下のようにしたいです

function array_xxxx(array $array, string $val1, [string $val2 ...])
※ mixedはPHPの関数などの説明で使われるキーワードで、
すべての型という意味があります。


次の関数を実行したとします。
array_xxxx($table, 'date', 'place', 'time_code');

配列で以下の値がほしいです!
array(
['2015-01-01'] => array(
['tokyo'] => array(
['1'] => array( // ここではtime_codeでまとめます
'mes' => 'hogehoge1',
'data' => 'span1'
),
['2'] => array( // ここではtime_codeでまとめます
'mes' => 'hogehoge2',
'data' => 'span2'
),
),
['osaka'] => array(
['1'] => array(
'mes' => 'hogehoge3',
'data' => 'span3'
),
),
),
['2015-01-02'] => array(
['tokyo'] => array(
['1'] => array( // ここではtime_codeでまとめます
'mes' => 'hogehoge4',
'data' => 'span4'
),
['2'] => array( // ここではtime_codeでまとめます
'mes' => 'hogehoge5',
'data' => 'span5'
),
),
)
)

業務の関係上、情報がとても少ないです...すみません

自分で考えないとダメなどのことを書くのはやめてください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

luckerさんの回答で解決しているかもしれませんが、array_multisortを使った例をぽちり(/ 'o')/⌒ ○
evalを多用していますがバリデーション処理は一切組み込んでいません(汗

lang

1<?php 2$array = array( 3 0 => array( 4 'date' => '2015-01-01', 5 'place' => 'tokyo', 6 'time_code' => '1', 7 'mes' => 'hogehoge1', 8 'data' => 'span1' 9 ), 10 1 => array( 11 'date' => '2015-01-03', 12 'place' => 'tokyo', 13 'time_code' => '2', 14 'mes' => 'hogehoge2', 15 'data' => 'span2' 16 ), 17 2 => array( 18 'date' => '2015-01-02', 19 'place' => 'osaka', 20 'time_code' => '1', 21 'mes' => 'hogehoge3', 22 'data' => 'span3' 23 ), 24 3 => array( 25 'date' => '2015-01-02', 26 'place' => 'tokyo', 27 'time_code' => '1', 28 'mes' => 'hogehoge4', 29 'data' => 'span4' 30 ), 31 4 => array( 32 'date' => '2015-01-02', 33 'place' => 'tokyo', 34 'time_code' => '2', 35 'mes' => 'hogehoge5', 36 'data' => 'span5' 37 ), 38); 39 40function array_xxxx(){ 41 $nums = func_num_args(); 42 $args = func_get_args(); 43 44 $arrindex = ''; 45 foreach($args[0] as $i=>$v){ 46 foreach($args as $k=>$s){ 47 if($k != 0){ 48 $sortkey[$s][] = $args[0][$s]; 49 $phparr[] = sprintf("\$sortkey['%s']",$s); 50 if($i==0){ 51 $arrindex .= sprintf("[\$v['%s']]",$s); 52 } 53 } 54 } 55 } 56 eval(sprintf("array_multisort(%s, \$args[0]);",implode(', ',$phparr))); 57 58 $res = array(); 59 foreach($args[0] as $k=>$v){ 60 eval('$res'.$arrindex."['mes']=\$v['mes'];"); 61 eval('$res'.$arrindex."['data']=\$v['data'];"); 62 } 63 return $res; 64} 65 66print_r(array_xxxx($array,'date','place','time_code'));

投稿2015/04/08 11:14

編集2015/04/08 11:16
hermitagejp

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

期待値と多少違いますが、期待値が間違ってるのと、
ソートのキーになったパラメターの削除はメンドクサイのでやってません。
自分で実装してください。

lang

1<?php 2 3 $table = array( 4 array( 5 'date' => '2015-01-01', 6 'place' => 'tokyo', 7 'time_code' => '1', 8 'mes' => 'hogehoge1', 9 'data' => 'span1' 10 ), 11 array( 12 'date' => '2015-01-01', 13 'place' => 'tokyo', 14 'time_code' => '2', 15 'mes' => 'hogehoge2', 16 'data' => 'span2' 17 ), 18 array( 19 'date' => '2015-01-01', 20 'place' => 'osaka', 21 'time_code' => '1', 22 'mes' => 'hogehoge3', 23 'data' => 'span3' 24 ), 25 array( 26 'date' => '2015-01-02', 27 'place' => 'tokyo', 28 'time_code' => '1', 29 'mes' => 'hogehoge4', 30 'data' => 'span4' 31 ), 32 array( 33 'date' => '2015-01-02', 34 'place' => 'tokyo', 35 'time_code' => '2', 36 'mes' => 'hogehoge5', 37 'data' => 'span5' 38 ), 39 ); 40 41 $result = array_enhanced_sort($table, 'date', 'place', 'time_code'); 42 43 print_r($result); 44 45/** 46 * copyright 2015 lucker 47 * author lucker 48 * MIT License. 49 **/ 50function array_enhanced_sort() 51{ 52 $nums = func_num_args(); 53 $args = func_get_args(); 54 55 $result = array(); 56 $result[] = $args[0]; 57 for($i=$nums-1; $i>0; $i--) 58 { 59 $result = array_sort_recursive($result, $args[$i]); 60 } 61 62 array_remake($result, $args, 2); 63 64 return $result; 65} 66 67function array_sort_recursive($array, $key) 68{ 69 $modified_array = array(); 70 foreach($array as $val) 71 { 72 foreach($val as $v){ 73 $modified_array[$v[$key]][] = $v; 74 } 75 } 76 ksort($modified_array); 77 return $modified_array; 78} 79 80function array_remake(&$array, $args, $idx) 81{ 82 foreach($array as &$val){ 83 $a = array(); 84 foreach($val as $v){ 85 $a[$v[$args[$idx]]][] = $v; 86 } 87 $val = $a; 88 89 if(count($args)-1 > $idx){ 90 array_remake($val, $args, $idx+1); 91 } 92 } 93 unset($val); 94}

投稿2015/04/01 14:19

編集2015/04/01 22:34
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

function array_xxxx(array $array, mixed $val1, [mixed $val2 ...])
※ mixedはPHPの関数などの説明で使われるキーワードで、すべての型という意味があります。

分かってるのにどうしてそこ、stringじゃなくてmixedなんだろうな…

投稿2015/04/01 12:56

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k4zzk

2015/04/01 13:12

ho!よく考えてみればそうですね... 考えて書いている内に書いたもの修正し忘れてました。 指摘、ありがとうございます! 修正しておきます
退会済みユーザー

退会済みユーザー

2015/04/01 13:51

で、自分で考えないとダメです。
退会済みユーザー

退会済みユーザー

2015/04/01 13:51

と、言うのは嘘で、どうやら出来たようですが、どうしましょう?
退会済みユーザー

退会済みユーザー

2015/04/01 13:55

> ho!よく考えてみればそうですね... > 考えて書いている内に書いたもの修正し忘れてました。 なんだ。てっきり書くパラメターごとにASC、DESC指定できるようにするために arrayを渡すこともある、という仕様後出しかと思って、 「仕様の後出しは反則です」って言おうと思ってたのに…
退会済みユーザー

退会済みユーザー

2015/04/01 14:00

osakaとtokyoはosakaの方が先のような…
退会済みユーザー

退会済みユーザー

2015/04/01 14:03

できてなかった… 残念。
退会済みユーザー

退会済みユーザー

2015/04/01 14:18

よし、でけた。やっぱり再帰は酔っぱらってる時にはヘビーだな…
k4zzk

2015/04/01 14:33

> と、言うのは嘘で、どうやら出来たようですが、どうしましょう? できたものは、見せていただけると、とてもありがたいです! >> ho!よく考えてみればそうですね... >> 考えて書いている内に書いたもの修正し忘れてました。 > > なんだ。てっきり書くパラメターごとにASC、DESC指定できるようにするために > arrayを渡すこともある、という仕様後出しかと思って、 > 「仕様の後出しは反則です」って言おうと思ってたのに… (笑)そこまではしませんよ... > osakaとtokyoはosakaの方が先のような… ...そのとおりです。 > できてなかった… 残念。 ozr > よし、でけた。やっぱり再帰は酔っぱらってる時にはヘビーだな… 酔っぱらっているののに、ここまでできるとは、、、 感服します<m(__)m>
k4zzk

2015/04/01 14:35

>> と、言うのは嘘で、どうやら出来たようですが、どうしましょう? >できたものは、見せていただけると、とてもありがたいです! 載せてくれていましたね ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問