PHPでよく使用する便利関数をまとめました。
他にも様々な便利関数はありますが、今回は15個に絞って紹介します。
in_arrayでorの条件文を短くする
変数の値をor判定行う場合、変数名によってはif文が長くなってしまいますよね。
if ($alphabetStr=="a" || $alphabetStr=="b" || $alphabetStr=="c"){
echo "ok";
}else{
echo "ng";
}
こんなときにin_arrayを使用するとifが短くなり簡単に記述できます
if (in_array($alphabetStr,['a','b','c'])){
echo "ok";
}else{
echo "ng";
}
拡張子を取り出す
文字列を配列化するexplode関数と配列の最後の要素を返すend関数を使用して拡張子を取り出します。
$fileName='aaa.txt';
$extension=explode('.',$fileName);
echo end($extension);
txt
URLのクエリ文字列を配列化
prase_urlでクエリ文字列を取り出し、parse_strで文字列を配列化します。
$url='https://exsample.com?a=1&b=2&c=3';
$query=parse_url($url, PHP_URL_QUERY);
parse_str($query, $output);
print_r($output);
Array ( [a] => 1 [b] => 2 [c] => 3 )
複数の拡張子を指定してファイル名を取得する処理を一行で書く
glob関数を使用すると一行でパターンにマッチするファイルを取得することができます。
$files = glob('*.{php,html}', GLOB_BRACE);
print_r($files);
Array ( [0] => function.php [1] => index.php [2] => test.html )
文字列を丸めて最後に「...」を追加する
mb_strimwidth関数は文字を丸めるのに最適。丸める幅は第3引数に指定します。幅は半角で1、全角2として数えます。
第4引数には文字列の最後に表示する文字を指定します。この引数を指定した場合、文字列の最後に追加されるのではなく、丸めた最後の文字と置き換えるので幅の指定には注意が必要です。
echo mb_strimwidth('あいうえおかきくけこ',0,13,'...');
あいうえお...
配列内の値の合計を計算
array_sumを使うとExcelマクロのsum関数のように配列内の数値の合計値を算出できます
$array=[1,2,3,4];
echo array_sum($array);
//10
$array=["1","2","3",4];
echo array_sum($array);
//10 文字列形式の数値が含まれている場合も計算可能
$array=['aaa',1,'bbb',2];
echo array_sum($array);
//3 文字が含まれている場合、無視して計算します
2つの配列を比較し差分を取得する
array_diffは第一引数に比較元を指定し、複数の配列から差分を取得できます
$array1=['apple','orange','grape','kiwi'];
$array2=['cherry','orange','banana','kiwi'];
//$array1の要素のうち、$array2に含まれない要素を返します
$ret = array_diff($array1,$array2);
$print_r($ret);
//Array ( [0] => apple [2] => grape )
比較対象の配列は複数指定可能。 第一引数($array1)が比較元となります。 array_diff($array1,$array2,$array3,...);
配列から重複した値を削除
array_unique関数を使うと配列内の値から重複値を削除できます
$array=[1,1,2,3,3,4,5];
print_r($result=array_unique($array));
//Array ( [0] => 1 [2] => 2 [3] => 3 [5] => 4 [6] => 5 )
//array_uniqueではキー飛び飛びになるので、新しく割り振るには以下で可能です
print_r(array_values($result));
//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) "
配列をフィルタリング
【書式】 array_filter( $配列 [, コールバック関数 [, $flag ]] )
コールバック関数を呼び出すことで、for文を使わずにフィルタリングできます。
$prices=[100,200,300,400,500];
$result=array_filter($prices, function($price) {
return $price >= 300; //300以上の値を返す
});
print_r($result);
// Array([2]=>300 [3]=>400 [4]=>500)
連想配列からカラムを指定して新しく配列を作る
array_column関数は連想配列から新たに添字配列を作成できます
$array=[ 0=>['id'=>1,'name'=>'aaa','age'=>24], 1=>['id'=>2,'name'=>'bbb','age'=>44] ];
//idをキーにname配列を作成
print_r(array_column($array,'name','id'));
// Array ( [1] => aaa [2] => bbb )
DBから取得したデータをセレクトボックスに設定する場合になどに使えますね
変数から連想配列を作成する
compactを使うと変数から連想配列を作れます
$name="yamada";
$age="33";
$array=compact('name','age');
print_r($array);
// Array ( [name] => yamada [age] => 33 )
laravelやcakephpでコントローラーからviewへ変数を渡す際によく使用します。
配列の要素を置き換える
array_replaceで配列内の要素を置換できます
第1引数の配列を第2引数以降の配列で置換します。
添字配列、連想配列どちらも置き換え可能。キーが存在しない場合は、要素に追加されます。
$array=['name'=>'yamada','age'=>33];
$repArray=['name'=>'suzuki','email'=>'aaa@test.com'];
$result=array_replace($array,$repArray);
print_r($result);
//Array ( [name] => suzuki [age] => 33 [email] => aaa@test.com
配列の値を複数の変数に代入する
listは配列の値を一括で複数の変数に設定できます
$array=[1,'yamada', 31];
list($id,$name,$age)=$array;
echo 'id:'.$id.' name:'.$name.' age:'.$age;
// id:1 name:yamada age:31
日付やCSV取得時に使用すると便利
list($year, $month, $day) = explode("/", $date)
while(list($id, $name, $age) = fgetcsv($fp) !== FALSE)
ファイル削除
unlinkでファイルを削除できます
echo unlink("aaa.txt") ; //ファイルが存在する
//true
echo unlink("bbb.txt") ; //ファイルが存在しない
//false
//成功した場合に true を、失敗した場合に false を返します
glob()指定でパターンにマッチするファイルを複数削除できます
foreach ( glob('dir/*.txt') ) as $file ) { unlink($file); }"
変数・配列の削除
unsetは配列の要素を削除できます。変数を指定した場合はnullになります。
$hoge="test"; unset($hoge); //nullになる
$array=[1,2,3,4,5];
unset($array[2]); //[1,2,4,5]となる unset($array);
//nullとなる連想配列の要素も削除できます。
DBから取得した一部のカラム要素が不要な場合などに使えますね。