2017年2月14日火曜日

配列内の値重複チェック

配列内の値の重複チェックを行うには、関数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("値が重複しています。");
    }
}

二つの配列から、連想配列をつくる

<?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日金曜日

$_POSTはスーパーグローバル変数

cakePHPのrequestオブジェクトのdataに突っ込んでいる。

コントローラーで何も値を書き変えなければ、そのままビューで値を使える。

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 wireshark
macにwiresharkを入れる

2016年11月24日木曜日

なんか、コミュニケーションの取り方が、僕らしくないなと思ってたら、

性格がよくラインとか、あうひとと似てきているのに気づいた。

僕は、基本的なマインドは、高田順次さんなんだよね。

言葉を発信するということは、少なからず相手に影響を与えるということは、理解してほしいす。





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日火曜日

PHP 全角Trim

trim(mb_convert_kana($text, "s", 'UTF-8')));

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; }) });