[PHP] array_filter()とarray_values()を使って配列から空要素を削除して添字をつめる方法


こんにちは、ふじーにょ(@fujinyo)です。
配列の中の空要素を削除する時に困ったことはありませんか?

そういう関数がないみたいなので、少し調べてみました。
今回は2つの関数を使います。

まずは配列の空要素を削除してみる
Baseball 018Baseball 018 / DeusXFlorida

まずは、配列の空要素を削除してみましょう。
foreach等を使う方法もありますが、array_filter関数で1行で簡単にできます。

//こんな配列があるとする...
$sportsArray = array("サッカー", "野球", "", "テニス");

//配列の中の空要素を削除する
$sportsArray = array_filter($sportsArray, "strlen");

これで、3つ目の要素の空要素が削除されます。
array_filterは、2つ目の引数がコールバック関数になっており1つ目の引数の配列の要素を1つ1つフィルタリングしてくれます。
今回は、strlen関数を使って文字列として長さのないもの(0 = false)は配列より削除される事になります。

でもこれだと添字が飛んでしまう…

配列から空要素は削除できたのですが、配列を見てみると…

// Array
// (
//     [0] => サッカー
//     [1] => 野球
//     [3] => テニス
// )

こうなっています。
そうです、添字2が削除されたのですがテニスは添字3のままです。

状況によっては、これが困る場合があると思います。
そういう時に、添字の振り直しを行います。array_values関数を使います。

//こんな配列があるとする...
$sportsArray = array("サッカー", "野球", "", "テニス");

//配列の中の空要素を削除する
$sportsArray = array_filter($sportsArray, "strlen");

//添字を振り直す
$sportsArray = array_values($sportsArray);

これで…

// Array
// (
//     [0] => サッカー
//     [1] => 野球
//     [2] => テニス
// )

うまく行きましたね。

では、また。

参考 : array_filter()とstrlen()で配列から空の要素を排除

[PR] 「結さん」があなたに代わって開発案件の依頼主を探します

  • 「既存のクライアントにギャラアップは言いにくい」
  • 「営業活動する時間がないし、苦手」
  • 「仕事が途切れたらどうしよう」

ITエンジニアのこんな悩みを「結さん」が解決してくれます
結さんへの無料会員登録後は提案メールを待つだけです!

関連記事