フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

WSLにLAMPを構築する(2018秋)

ループ文の中でifを使う

適当な文字列の配列を用意して、その中から先頭に「-」がついているワードをフィルターしてみる。

$keywords = ['野菜', '-にんじん', '-きゃべつ', 'じゃがいも', 'すいか'];
$keywordFiltered = [];
foreach ($keywords as $i => $keyword) {
    if (!preg_match('/^-.*/', $keyword)) {
        $filtered[] = $keyword;
    }
}
var_dump($keywordFiltered);

結果(var_dump)

array (size=3)
  0 => string '野菜' (length=6)
  1 => string 'じゃがいも' (length=15)
  2 => string 'すいか' (length=9)

array_filterを使う

PHPにはarray_filterという関数があるので使ってみる。

第一引数には配列、第二引数にはコールバック関数を渡す。

コールバック関数は、外出しして関数名を指定してもいいが、無名関数でもいける。

下の場合は無名関数を使用。

$keywords = ['野菜', '-にんじん', '-きゃべつ', 'じゃがいも', 'すいか'];
$keywordFiltered = array_filter($keywords, (function($keyword) {
    return !preg_match('/^-.*/', $keyword);
}));
var_dump($keywordFiltered);

結果(var_dump)

array (size=3)
  0 => string '野菜' (length=6)
  3 => string 'じゃがいも' (length=15)
  4 => string 'すいか' (length=9)

関数を外出しするとこんな感じ。

function filterMinusWord(string $keyword):bool
{
    return !preg_match('/^-.*/', $keyword);
}
$keywords = ['野菜', '-にんじん', '-きゃべつ', 'じゃがいも', 'すいか'];
$keywordFiltered = array_filter($keywords, 'filterMinusWord');
var_dump($keywordFiltered);

ただこのままだと添字が飛び飛びになってしまっているので、array_valuesを使うと、添字の振り直しができる。

filterした差分の配列を取得する

場合にもよるけど、全体とフィルター後の配列の差分を取りたい場合もあるので、その場合の方法も書いてみる。

そういう場合には、array_diffを使う。

array_diffも返ってくる配列の添字が飛び飛びなので、array_valuesで添字の振り直しが必要。

$keywords = ['野菜', '-にんじん', '-きゃべつ', 'じゃがいも', 'すいか'];
function filterMinusWord(string $keyword):bool
{
    return !preg_match('/^-.*/', $keyword);
}
$keywordPlus = array_filter($keywords, 'filterMinusWord');
$keywordMinus = array_diff($keywords, $keywordPlus);
var_dump(array_values($keywordMinus));

結果(var_dump)

array (size=2)
  0 => string '-にんじん' (length=13)
  1 => string '-きゃべつ' (length=13)

処理速度

配列の要素数を10000にして比較してみた。
array_valuesとか使ってるので、単純な比較ではなくなってるけどやっぱり単なるループの方が早い。

# ループ文
0.0078341960906982(sec)
# array_filter
0.011768102645874(sec)

使ってみた感想

なんかこういうときに思考停止してループばっかり書いてるので、たまにはPHPの標準関数も使っていこうじゃないかと思って使ってみました。

多分普通にループ文を使うことになるんですが、調べながらどうなのか検証するって作業は割と楽しかったです。

[紹介元] PHPタグが付けられた新着投稿 – Qiita WSLにLAMPを構築する(2018秋)

コメント

記事に戻る

コメントを残す