PHP でよく使用される 2 つの配列フィルター関数、array_filter と array_unique を紹介します。1 つは配列の空の値をフィルターするもので、もう 1 つは配列の重複する値をフィルターするものです。
文法
array_filter(配列,関数)
パラメータの説明
配列 必須。入力配列を指定します。
function カスタム関数の名前。空の場合、値が false のすべての要素が除外されます
コードは次のとおりです |
コードをコピー |
関数奇数($var) {
リターン($var & 1);
}
関数even($var) {
リターン(!($var & 1));
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = 配列(6, 7, 8, 9, 10, 11, 12);
エコー「奇数:n」;
print_r(array_filter($array1, "奇数"));
エコー「偶数:n」;
print_r(array_filter($array2, "even"));
/*
奇数:
配列
(
[a] => 1
[c] => 3
[e] => 5
)
偶数:
配列
(
[0] => 6
[2] => 8
[4] => 10
[6] => 12
)
*/
PHP配列内の重複する値をフィルターで除外します
配列から重複した値を削除するには、foreach メソッドまたは array_unique メソッドを使用できます。次のコードでは両方のメソッドを使用します。
|
コードは次のとおりです
コードをコピー
$arrF = 配列(); |
$arrS = 配列();
$intTotal = 100; |
$intRand = 10;
for($i=0; $i <$intTotal; $i++)
{
$arrF[] = rand(1, $intRand);
$arrS[] = rand(1, $intRand);
}
$arrT = array_merge($arrF, $arrS);
$arrRF = 配列();
$intStart = 時間();
foreach($arrT as $v)
{
if(in_array($v, $arrRF))
{
続けます;
}
それ以外
{
$arrRF[] = $v;
}
}
$intEnd = 時間();
$intTime = $intEnd-$intStart;
echo "続行すると、時間を費やします:$intTime ";
$intStart1 = 時間();
$arrRS = array_unique($arrT);
$intEnd2 = 時間();
$intTime2 = $intEnd2-$intStart1;
echo "array_unique 関数を使用して、時間を費やす:($intTime2)";
echo " ";<br>
print_r($arrT);<br>
print_r($arrRF);<br>
print_r($arrRS);<br>
echo " ";
?>
$intTotal が比較的小さい場合 (たとえば、1000 以内)、$intRand の値は基本的に結果に影響を与えず、両方の実行時間は同様になります。
$intTotal が 10000 より大きい場合、$intRand が 100 のとき、foreach ループの判定 $intRand=10 よりも array_unique を使用した効率が高く、両方の実行時間は同じです。
したがって、配列の容量が大きくない場合 (おそらく 1000 以内)、2 つを使用した場合の実行効率は同等であると結論付けることができます。
配列の容量が比較的大きい場合 (特定の値はテストしていません。興味があればこの値を決定できます)、$intRand が徐々に増加するにつれて、array_unique のパフォーマンスが向上します。$intTotal/ 比率の理由は使用しません。 $intRand の値は、比例して変化するようには感じられないという点で異なりますが、基本的には、比率が大きいほど array_unique のパフォーマンスが向上するということになります。
要約すると、配列内の重複する値をフィルタリングする場合は、array_unique を使用することをお勧めします。配列が小さい場合、array_unique を使用すると、コードが数行削減されます。配列の容量が大きすぎるため、関数のパフォーマンスが向上します
2次元配列重複排除機能
PHP 配列には重複を削除する組み込み関数 array_unique () がありますが、PHP の array_unique 関数は 1 次元配列にのみ適用でき、多次元配列には適用できません。
コードは次のとおりです
| コードをコピー
|
関数 unique_arr($array2D,$stkeep=false,$ndformat=true)
{
// 第 1 レベルの配列キーを保持するかどうかを決定します (第 1 レベルの配列キーは数値以外の場合もあります)
if($stkeep) $stArr = array_keys($array2D);
// セカンダリ配列キーを保持するかどうかを決定します (すべてのセカンダリ配列キーは同じでなければなりません)
if($ndformat) $ndArr = array_keys(end($array2D));
//次元削減。implode を使用して 1 次元配列をカンマで接続された文字列に変換することもできます
foreach ($array2D を $v){
$v = 参加(",",$v);
$temp[] = $v;
}
//繰り返しの文字列、つまり繰り返しの一次元配列を削除します
$temp = array_unique($temp);
//逆アセンブルされた配列を再アセンブルします
foreach ($temp as $k => $v)
{
if($stkeep) $k = $stArr[$k];
if($ndformat)
{
$tempArr = 爆発(",",$v);
foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;
}
それ以外の場合 $output[$k] =explode(",",$v);
}
$output を返す;
}
テスト
$array2D = array('first'=>array('title'=>'1111','date'=>'2222'),'first'=>array('title'=>' 1111','日付'=>'2222'),'三次'=>array('タイトル'=>'2222','日付'=>'3333'));
print_r($array2D);
print_r(unique_arr($array2D,true));
|
|
http://www.bkjia.com/PHPjc/633131.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/633131.html技術記事 php で、よく使用される 2 つの配列フィルター関数、array_filter と array_unique を紹介します。1 つは配列の null 値をフィルターするもので、もう 1 つは配列の重複する値をフィルターするものです...。