array_count_valuesか、array_uniqueを使う。
$array = [1,2,3,4,5,6,7,8,9,10,"a","b","c","d","",1,2,3,4,5,6,7,8,9,10];
echo "array_count_values:".count(array_count_values($array));//15
echo "<br />";
echo "array_unique:".count(array_unique($array));//15
//var_dump(array_count_values($array));
//array(15)
{ [1]=> int(2) [2]=> int(2) [3]=> int(2) [4]=> int(2)
[5]=> int(2) [6]=> int(2) [7]=> int(2) [8]=> int(2) [9]=>
int(2) [10]=> int(2) ["a"]=> int(1) ["b"]=> int(1) ["c"]=>
int(1) ["d"]=> int(1) [""]=> int(1) }
//var_dump(array_unique($array));
//array(15)
{ [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4)
[4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) [8]=>
int(9) [9]=> int(10) [10]=> string(1) "a" [11]=> string(1) "b"
[12]=> string(1) "c" [13]=> string(1) "d" [14]=> string(0) "" }
カウントする対象は、文字列か数値のみ
Translate
2016年2月18日木曜日
2016年2月17日水曜日
【mysql】各キーの最新ログ5件を取得したい
全IDの最新ログ5件を表示
logテーブルから、各IDごとの最新ログ5件を拾いたいとき。
IDを指定できるなら
SELECT `id` , group_concat(`status` separator ',') as "recent_log" from ( SELECT * FROM `log` WHERE `id` ="hoge" order by date limit 5 ) as Table1
これが手っ取り早い。ただし、受信した側で処理する必要がある。
行を別々にとりたいというとき
SELECT * FROM log as Table1 WHERE (SELECT COUNT(*) FROM log as Table2 WHERE Table2.id = Table1.id AND Table2.date > Table1.date) < 3 AND id ="hoge" ORDER BY id DESC, date DESC
ただし、処理がかなり重い。件数の多いlogテーブルとかで使うのは実用的ではないかも
これを、例えば役員(officer)の最近ログ5件を全て表示!安全にサボりたい!としたいときはこんな感じ
SELECT * FROM log as Table1 WHERE (SELECT COUNT(*) FROM log as Table2 WHERE Table2.id = Table1.id AND Table2.date > Table1.date) < 5 AND id in ( select id from id_table where class ="officer" ) ORDER BY id DESC, date DESC
こちらも、もちろん処理が重い
logテーブルから、各IDごとの最新ログ5件を拾いたいとき。
IDを指定できるなら
SELECT `id` , group_concat(`status` separator ',') as "recent_log" from ( SELECT * FROM `log` WHERE `id` ="hoge" order by date limit 5 ) as Table1
これが手っ取り早い。ただし、受信した側で処理する必要がある。
行を別々にとりたいというとき
SELECT * FROM log as Table1 WHERE (SELECT COUNT(*) FROM log as Table2 WHERE Table2.id = Table1.id AND Table2.date > Table1.date) < 3 AND id ="hoge" ORDER BY id DESC, date DESC
ただし、処理がかなり重い。件数の多いlogテーブルとかで使うのは実用的ではないかも
これを、例えば役員(officer)の最近ログ5件を全て表示!安全にサボりたい!としたいときはこんな感じ
SELECT * FROM log as Table1 WHERE (SELECT COUNT(*) FROM log as Table2 WHERE Table2.id = Table1.id AND Table2.date > Table1.date) < 5 AND id in ( select id from id_table where class ="officer" ) ORDER BY id DESC, date DESC
こちらも、もちろん処理が重い
2016年2月10日水曜日
【php】json_decodeで配列にならない
先日の続き。
phpexcelで作った配列をjavascriptにJSON形式で渡して、その後さらに$_postの内容をphpに渡すとき、
json_decode($_POST["array"]);
としたのだが、うまく配列にならない。
json_decode($_POST["array"],true);
配列としたいのなら、パラメータに属性を渡して上げなくてはいけなかった。
急いでると、簡単なところでつまずきます。
phpexcelで作った配列をjavascriptにJSON形式で渡して、その後さらに$_postの内容をphpに渡すとき、
json_decode($_POST["array"]);
としたのだが、うまく配列にならない。
json_decode($_POST["array"],true);
配列としたいのなら、パラメータに属性を渡して上げなくてはいけなかった。
急いでると、簡単なところでつまずきます。
2016年2月8日月曜日
【phpexcel】【php】【ajax】phpexcelが重すぎたので、ajaxで分割post
phpexcelについて。
xlsxをpost→読み込み、配列に変換→フォーマットに沿ってxlsxを書き出し・・・という処理を作っていたのだが、
うわさに聞いていた通り、かなりメモリを食うようで、5000行を読み込んで分割して・・・といった処理が完走できない。
下手をすると300行くらいの処理も危うい。
google先生に泣きついて、unsetなりphpのメモリを上げるなりしたのだが、エラーメッセージを吐かないで固まってしまう。
しょうがないので、
xlsxをpost→読み込み、配列に変換→生成するファイルごとに配列を分割→ajaxで連続送信→フォーマットに沿ってxlsxをoutput
・・・とやったら、一瞬で処理が終わってしまった。
やはり、どこかでメモリが解放しきれていなかったのだろうか。
色々手を変え品を変えやっていたら、はまってしまったが、結果としてajaxで途中経過も出力できるようになったし、よかった。
xlsxをpost→読み込み、配列に変換→フォーマットに沿ってxlsxを書き出し・・・という処理を作っていたのだが、
うわさに聞いていた通り、かなりメモリを食うようで、5000行を読み込んで分割して・・・といった処理が完走できない。
下手をすると300行くらいの処理も危うい。
google先生に泣きついて、unsetなりphpのメモリを上げるなりしたのだが、エラーメッセージを吐かないで固まってしまう。
しょうがないので、
xlsxをpost→読み込み、配列に変換→生成するファイルごとに配列を分割→ajaxで連続送信→フォーマットに沿ってxlsxをoutput
・・・とやったら、一瞬で処理が終わってしまった。
やはり、どこかでメモリが解放しきれていなかったのだろうか。
色々手を変え品を変えやっていたら、はまってしまったが、結果としてajaxで途中経過も出力できるようになったし、よかった。
2016年2月4日木曜日
【CSS】【javascript】ドラッグアンドドロップはhoverではない
タイトルどおりなのですが。
ブラウザにファイルをドラッグアンドドロップしてアップロード・・・というものを作っているとき、
指定のゾーンにドラッグしているマウスが移動したら、色を変えるなりしようと思っていたのですが、
実際には、うまく動かない。
ファイルをドロップした後に、hoverとして認識されてしまう。
どうやら、cssのhoverではドラッグ中のマウスは感知できない。
こんなときは、javascriptのdrag~イベントを使うしかないみたい。
マウスがホバーなんだからいいじゃん!とは思ったけど、全くの別物のようです。
ちょっと混乱したのでメモ。
ブラウザにファイルをドラッグアンドドロップしてアップロード・・・というものを作っているとき、
指定のゾーンにドラッグしているマウスが移動したら、色を変えるなりしようと思っていたのですが、
実際には、うまく動かない。
ファイルをドロップした後に、hoverとして認識されてしまう。
どうやら、cssのhoverではドラッグ中のマウスは感知できない。
こんなときは、javascriptのdrag~イベントを使うしかないみたい。
マウスがホバーなんだからいいじゃん!とは思ったけど、全くの別物のようです。
ちょっと混乱したのでメモ。
ラベル:
CSV,
javascript,
お仕事メモ
2016年2月1日月曜日
【phpMyAdmin】【excel】csvをインポートすると先頭の文字が消える
東京都○○区・・・というデータをインポートするが、
都○○区となっていて仰天。
エクセルからcsvを書き出し、phpMyAdminにインポートしようとすると、ファイル先頭の2文字が消えることがある。
文字化けとかではなく、文字欠け。ぐぐっても文字化けの問題ばかりひっかかるので、一応メモ。
エクセル → ヘッダ削除 → CSVにエクスポート → テキストエディタでエンコードをUTF-8に変更 → インポート → 文字欠けで死亡!
悪さが起きるのがファイル最初の文字なので、BOMがゴニョゴニョとしているのかもしれないが、
とりあえず、バッドノウハウだけ書いておこう。
エクセル → CSVにエクスポート → テキストエディタでエンコードをUTF-8に変更 → インポート →
インポート時、phpMyAdminの部分インポートというところで
Skip this number of queries (for SQL) or lines (for other formats), starting from the first one:
の値を「1」
とする。最初の一行をヘッダ扱いで無視するよ・・・ということ。これでたぶん問題なし!
根本的に解決してないので、モヤモヤしますが。
都○○区となっていて仰天。
エクセルからcsvを書き出し、phpMyAdminにインポートしようとすると、ファイル先頭の2文字が消えることがある。
文字化けとかではなく、文字欠け。ぐぐっても文字化けの問題ばかりひっかかるので、一応メモ。
エクセル → ヘッダ削除 → CSVにエクスポート → テキストエディタでエンコードをUTF-8に変更 → インポート → 文字欠けで死亡!
悪さが起きるのがファイル最初の文字なので、BOMがゴニョゴニョとしているのかもしれないが、
とりあえず、バッドノウハウだけ書いておこう。
エクセル → CSVにエクスポート → テキストエディタでエンコードをUTF-8に変更 → インポート →
インポート時、phpMyAdminの部分インポートというところで
Skip this number of queries (for SQL) or lines (for other formats), starting from the first one:
の値を「1」
とする。最初の一行をヘッダ扱いで無視するよ・・・ということ。これでたぶん問題なし!
根本的に解決してないので、モヤモヤしますが。
2016年1月27日水曜日
【php】配列をCSVに書き出し&文字コード変換
表題どおり。
配列内の要素を一つ一つshiftjisに変換してから書き込んでいます。
日本語文字コードを一つに統一して欲しいのだけど、血を血で洗う戦争が起きたりするのでしょうか。
$csv = new SplFileObject( "csv.csv", "w" );
foreach ($array_for_csv as $raw_array) {
$encodedarray =array();
foreach ($raw_array as $rawtext) {
$encodedarray[] = mb_convert_encoding($rawtext,'SJIS');
}
$csv->fputcsv($encodedarray);
}
fclose($csv);
配列内の要素を一つ一つshiftjisに変換してから書き込んでいます。
日本語文字コードを一つに統一して欲しいのだけど、血を血で洗う戦争が起きたりするのでしょうか。
$csv = new SplFileObject( "csv.csv", "w" );
foreach ($array_for_csv as $raw_array) {
$encodedarray =array();
foreach ($raw_array as $rawtext) {
$encodedarray[] = mb_convert_encoding($rawtext,'SJIS');
}
$csv->fputcsv($encodedarray);
}
fclose($csv);
登録:
投稿 (Atom)