便利なPHPの関数15選

Pocket

PHPでよく使用する便利関数をまとめました。

他にも様々な便利関数はありますが、今回は5つに絞って紹介します。

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から取得した一部のカラム要素が不要な場合などに使えますね。

 

以上です。他にも思いついたらどんどん追記していきます。

またこの記事で使用しているアイキャッチ画像は以下より作成可能です。

関数の解説に使えるテンプレート

最後まで読んでいただきありがとうございました。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です