50
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

php便利関数

Last updated at Posted at 2015-06-04

phpの便利関数を紹介します。
phpのバージョンは5.5以上を想定しています。

array_column

それぞれの配列から任意の連想配列を取り出します。

よくこんな配列ありますよね。

$user_data = [
  0 => [
    'id'         => 100,
    'name'       => '太郎',
    'created_at' => '2015/01/01'
  ],
  1 => [
    'id'         => 101,
    'name'       => '花子',
    'created_at' => '2015/01/02'
  ]
  // ...
];

こんな感じの配列はDBからデータを取得するときよくあります。

  • idだけ取りたい場合
array_column($user_data, 'id');

// => [
//     0 => 100,
//     1 => 101
// ] 

こんな感じに取り出してくれるので、in_array()なんかで判定するにも便利ですね。

  • idがkeyのnameを取りたい場合
array_column($user_data, 'name', 'id')
// => [
//   100 => '太郎',
//   101 => '花子',
// ]

こんな感じにidをkeyでnameを取得出来ました。
更にnameだけじゃなくて全部とりたいよ~ドラえも~んといった場合は、

array_column($user_data, null, 'id');
//  100 => [
//    'id'         => 100,
//    'name'       => '太郎',
//    'created_at' => '2015/01/01'
//  ],
//  101 => [
//    'id'         => 101,
//   'name'       => '花子',
//    'created_at' => '2015/01/02'
//  ]

こんな感じに全部取れます!
array_columnなしで行おうとするとforeach使ったり結構めんどくさいので、おすすめです!

##array_walk
これ、要するにforeachをcallback使ってできますよ、という関数です。

foreach($data as $key => $value) {
 //...
}

array_walk($data, function($value, $key) {
  //...
});

array_walkのメリットとしては

  1. 無名関数を利用しているので、外のスコープを汚さない
    2. 処理速度が早い(foreachの方が速い)
    です!

配列の中身を変えたい場合は、上記でいう$valueを&$valueと参照渡しをしてください!($keyはできない)
あと外のスコープの値を利用したい場合は、

array_walk($data, function($value, $key)use($out_data) {
  //...
});

とするか、

array_walk($data, function($value, $key, $out_data){
  //...
}, $out_data);

のようにしてください。
2つは参照渡しにした場合に挙動が違いますが、
そこは手抜..勉強になるので動かしてみてください。
クロージャが作れます\(^o^)/

implode

配列を文字列に結合します。

implode(', ', [
  '太郎',
  '花子',
  '健太'
])
// => 太郎, 花子, 健太

空配列を渡せば、空文字列を出力してくれるため、ビューでも使いやすいです。

strtotime

日付形式の文字列をタイムスタンプにする関数です。
これdate関数と一緒によく使います。
日付を変換したいときは基本的に

date('Y-m-d H:i:s') //現在時刻
date('Y-m-d H:i:s', strtotime('- 1 month')) // 一ヶ月前
date('Y年m月d日', strtotime('1990/8/18')) //1990年08月18日

みたいな感じでいけちゃう!

また、正しい日付形式か確認するときは

if(strtotime($date) > 0) {
}

で確認できたりします。

※1970年1月1日 9:00より前の日付が来るときはtrueにならないので使用しない。

続くかも。。

50
45
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?