配列内の値の重複チェックを行うには、関数array_count_valuesが使えます。
[使用例]
$array = array (1, "Tokyo", 1, "Osaka", "Tokyo");
print_r(array_count_values ($array));
[結果]
Array(
[1] => 2
[Tokyo] => 2
[Osaka] => 1
)
[使用例2]
実際には以下のような形で使うことになるかと思います。
$array = array(11, 12, 13, 11, 15);
// 各値の出現回数をここで抽出
$array_value = array_count_values($array);
$num = count($array);
for($i=0; $i < $num; $i++){
$key = $array[$i];
// 出現回数を格納
$count = $array_value[$key];
if($count > 1){
print("値が重複しています。");
}
}
2017年2月14日火曜日
二つの配列から、連想配列をつくる
<?php |
$a = array( 30, "PHP", 87, 33, "入門" ); |
$b = array( "WEB", 1, "プログラミング", 2, 3 ); |
print_r( array_combine($a, $b) ); |
?> |
2017年2月5日日曜日
PHP 入れ子になった配列並びえ
//order_numで並び替えたいとき。
$array = array(
array(
'id' => 0,
'order_num' => 'key100-01',
'title' => 'ベィスドロップ・フリークス',
'artist' => 'かめりあ feat. ななひら'
),
array(
'id' => 1,
'order_num' => 'key001-03',
'title' => 'CHRONO DIVER -NORNIR-',
'artist' => 'L.E.D.'
),
array(
'id' => 2,
'order_num' => 'key001-01',
'title' => 'illuminate',
'artist' => 'Sota Fujimori'
),
array(
'id' => 3,
'order_num' => 'key001-04',
'title' => 'YYYYY',
'artist' => 'XXXXXX'
),
);
foreach ((array) $array as $key => $value) {
$sort[$key] = $value['order_num'];//ソートしたいキー
}
var_dump($sort);
array_multisort($sort, SORT_ASC, $array);
var_dump($array);
2017年1月25日水曜日
2017年1月20日金曜日
2016年12月8日木曜日
2016年12月4日日曜日
ネットワークDNS
DNSリゾルバがキャッシュしている情報
ipconfig /displaydns
ipconfig /flushdns
http://www.atmarkit.co.jp/ait/articles/0109/29/news005.html
http://devadjust.exblog.jp/3603596/
http://www.infraexpert.com/study/tcpip24.html
コンピュータの中に入ってる=>DNSスタブリゾルバ
http://mage8.com/websitetips/dns.html
2016年11月26日土曜日
macにwiresharkを入れる
$ brew remove wireshark $ brew install wireshark --with-qt $ brew cask install wireshark-chmodbpf $ brew linkapps wiresharkmacにwiresharkを入れる
2016年11月24日木曜日
2016年11月19日土曜日
2016年11月16日水曜日
2016年11月13日日曜日
CakePHP behaviorにValidation作る
Cake1.x系ですが、参考になりそうなのでメモ
class AddValidationRuleBehavior extends ModelBehavior {
function setup(&$model, $config = array())
{
//$this->settings = $config;
mb_internal_encoding("UTF-8");
}
/**
* マルチバイト用バリデーション 文字数上限チェック
*
* @param array &$model
* @param array $wordvalue
* @param int $length
* @return boolean
*/
function maxLengthJP( &$model, $wordvalue, $length ) {
$word = array_shift($wordvalue);
//return( mb_strlen( $word, mb_detect_encoding( $word ) ) <= $length );
return( mb_strlen( $word ) <= $length );
}
/**
* マルチバイト用バリデーション 文字数下限チェック
*
* @param array &$model
* @param array $wordvalue
* @param int $length
* @return boolean
*/
function minLengthJP( &$model, $wordvalue, $length ) {
$word = array_shift($wordvalue);
return( mb_strlen( $word ) >= $length );
}
/**
* フィールド値の比較
* emailとemail_confフィールドを比較する場合などに利用
* _confは$suffixによって変更可能
*
* @param array &$model
* @param array $wordvalue
* @param string $suffix
* @return boolean
*/
function checkCompare( &$model, $wordvalue , $suffix ){
$fieldname = key($wordvalue);
return ( $model->data[$model->alias][$fieldname] === $model->data[$model->alias][ $fieldname . $suffix ] );
}
/**
* 全角カタカナ以外が含まれていればエラーとするバリデーションチェック
*
*
* @param array &$model
* @param array $wordvalue
* @return boolean
*/
function katakana_only( &$model, $wordvalue){
$value = array_shift($wordvalue);
return preg_match("/^[ァ-ヶー゛゜]*$/u", $value);
}
/**
* 全角、半角スペースのみであればエラーとするバリデーションチェック
*
* @param array &$model
* @param array $wordvalue
* @return boolean
*/
function space_only( &$model, $wordvalue){
$value = array_shift($wordvalue);
if( mb_ereg_match("^(\s| )+$", $value) ){
return false;
}else{
return true;
}
}
/**
* only Allow 0-9, a-z , A-Z
*
* @param array ref &$model
* @param array $wordvalue
* @return boolean
*/
function alpha_number( &$model, $wordvalue ){
$value = array_shift($wordvalue);
return preg_match( "/^[a-zA-Z0-9]*$/", $value );
}
}
?>
2016年11月10日木曜日
CakePHP Validationいろいろ
コントローラーでモデルで指定するほどじゃないけど、
ちょっとだけ使いたい。そんなときに。
App::uses('Validation','Utility');
if(Validation::url($this->params['form']['url'])){
echo 'urlだよ';
} else {
echo 'noturl';
}
if(Validation::blank($this->request->data['User']['email'])){
//ちなみに全角マッチしなかった
debug("match");
return;
}else{
debug("Not match!!!!!");
return;
}
CSRF
csfr仕組み
csfr仕組み
if($this->request->is('post') ){
$tokenHidden = $this->request->data['User']['Token'];
$tokenSession = $this->Session->read('Token');
if($tokenHidden == $tokenSession){
debug("Tokenおなじです");
}else{
debug("Tokenちがうよ");
}
$this->set('token', $this->Session->read('Token'));
}else{
//GET時Tokenセット
$this->Session->delete('Token');
$uid = sha1(uniqid(mt_rand(), true));
$this->Session->write('Token', $uid);
$this->request->data['User']['Token']=$uid;
}
2016年11月6日日曜日
PHP 連想配列並び替え
$arr = array('T'=>'Tokyo', 'Y'=>'Yokohama', 'K'=>'Kyoto');
$arr += array('N'=>'Nagoya');
$arr2 = array('N','K','Y','T');//連組配列を並び替える
$ret=array();
foreach ($arr2 as $key => $value) {
foreach ($arr as $k => $v) {
if($value===$k){
switch ($k) {
case 'N':
$ret=array_merge($ret,array($k => 'なごや'));
break;
default:
$ret=array_merge($ret,array($k => $v));
echo '';
var_dump($ret);
echo '';
break;
}
}
}
}
2016年11月1日火曜日
CakePHP バリデーション
コントローラ内でバリデーション処理を呼び出す
フィールドを限定してバリデーションを行う
$this->User->set( $this->request->data );
if ($this->User->validates( array( 'fieldList' => array( 'username', 'password')))) {
// バリデーションOKの場合の処理
} else {
// バリデーションNGの場合の処理
}
CakePHP CSV
【PHP】【CakePHP】CSVダウンロード
//ビューを使わない
$this->autoRender = false;
//Content-Typeを指定
$this->response->type('csv');
//download()内ではheader("Content-Disposition: attachment; filename=hoge.csv")を行っている
$this->response->download("hoge.csv");
$fp = fopen('php://output','w');
//CSVをエクセルで開くことを想定して文字コードをSJISへ変換する設定を行う
stream_filter_append($fp, 'convert.iconv.UTF-8/CP932', STREAM_FILTER_WRITE);
$user_list = [
[...],
[...],
[...],
];
foreach($user_list as $user){
fputcsv($fp, $user);
}
fclose($fp);
100, 'k1'=>200, 'k2'=>300, 'k3'=>400),
);
echo ''; var_dump($list); echo ''; $fp = fopen('file.csv', 'w'); foreach ($list as $fields) { fputcsv($fp, $fields); } fclose($fp); /* 出力結果 連想配列のキーは無視される。 100,200,300,400 */ array('k0'=>100, 'k1'=>200, 'k2'=>300, 'k3'=>400), 'DEF'=> array('k00'=>1000, 'k11'=>2000, 'k22'=>3000, 'k33'=>4000), ); echo '
'; var_dump($list); echo ''; $fp = fopen('file.csv', 'w'); foreach ($list as $fields) { fputcsv($fp, $fields); } fclose($fp); ?> /* 出力結果 連想配列のキーは無視される。 100,200,300,400 1000,2000,3000,4000 */
ラジオボタン 個別に作る方法
radio('gender', array(1 => 'A'), array('hiddenField' => false));
echo "B:" . $form->radio('gender', array(2 => 'B'), array('hiddenField' => false));
?>
http://rfs.jp/sb/php/cakephp/form-radio-hiddenfield.html
2016年10月31日月曜日
リロード対策 メモ
http://php.o0o0.jp/article/jquery-reload
$(function () {
var beforecode;
$(document).on('keydown',function(e){
var keycode = (e.keyCode ? e.keyCode : e.which);
// F5 116 / Ctrl + r 17+82
if (keycode == 116
|| keycode == 17 && beforecode == 82
|| keycode == 82 && beforecode == 17) {
// 中断
return false;
}
beforecode = keycode;
}) });
登録:
投稿 (Atom)