質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4253閲覧

array_filterを使用した、配列の空要素を削除するときの、strlenの動作について

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2014/08/12 12:06

配列の空要素を削除したい場合に、array_filterを使用する方法を見つけ、試しました。
$array = explode("/", $result); $array = array_filter($array, "strlen");
確かに空要素は削除され、値を持つ要素のみ残りました。
しかし、このときのstrlenがどのように動作しているのかが分かりません。
strlenは要素の長さを返すと公式のマニュアルにもあるのですが、空要素だと0が入るものだと思っていました。
なぜ0が入らず、削除されているのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

array_filterはコールバック関数(今回はstrlen)が配列の中身のデータに対してfalseになるものを取り除いた配列を返します。
やることはあくまで除外で、falseだから別の値で埋めるということはしません。

例えば
$result = 'aa/bb//dd//ff'; $array = explode("/", $result); $array = array_filter($array, "strlen");
とした場合、内部的にそれぞれの要素に対して下記のような判定が行われ、
return strlen('aa') == true; return strlen('bb') == true; return strlen('') == true; return strlen('dd') == true; return strlen('') == true; return strlen('ff') == true;
2つあるstrlen('')は結果が0なのでfalseと判定され、
結果配列から除外されます。

ちなみに今回の場合array_filterの第2引数はなくても同じ結果が返ります。

投稿2014/08/12 13:27

kinme

総合スコア843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問