現在の位置: ホーム> 最新記事一覧> array_filterとarray_map機能を一緒に使用するための実用的なヒントは何ですか?より良い結果を組み合わせて使用​​する方法は?

array_filterとarray_map機能を一緒に使用するための実用的なヒントは何ですか?より良い結果を組み合わせて使用​​する方法は?

gitbox 2025-05-28

PHPでは、 array_filterarray_mapは、非常に一般的に使用されている2つの強力な配列処理機能です。単独で使用すると独自の用途がありますが、それらを組み合わせると、コードのシンプルさと効率を大幅に改善できます。この記事では、これら2つの機能の使用を詳細に紹介し、それらの組み合わせの実用的なヒントとベストプラクティスを共有します。


1. array_filterとarray_mapを理解します

  • array_filter
    この関数は、配列要素をフィルタリングするために使用されます。コールバック関数は、各要素が条件を満たしているかどうかを決定し、条件を満たすすべての要素で構成される新しい配列を返します。

     $filtered = array_filter($array, function($item) {
        return $item > 10; // フィルターはより大きい10要素
    });
    
  • array_map
    この関数は、配列の各要素で同じコールバック操作を実行するために使用され、処理された新しい配列を返します。

     $mapped = array_map(function($item) {
        return $item * 2; // 各要素を掛けます2
    }, $array);
    

2。なぜそれを組み合わせて使用​​するのですか?

  • フィルタリング後、MAP :最初にArray_Filterを使用して条件を満たす要素をフィルタリングし、 Array_Mapを使用してこれらの要素を均一に処理します。

  • マッピング後、フィルター:最初にarray_mapを使用してArray要素形式を変換し、 Array_filterを使用して要件を満たす結果をフィルタリングします。

  • 1回限りのチェーン操作:組み合わせて使用​​して簡潔で直感的なチェーンコードを作成し、長期にわたるループの書き込みを避けます。


3.実用的なヒントと例

ヒント1:最初にフィルタリングし、次にマップして、マッピング関数が条件を満たす要素のみを処理することを確認する

<?php
$numbers = [1, 5, 12, 18, 7, 25];

// より大きいものを除外します10数字
$filtered = array_filter($numbers, function($num) {
    return $num > 10;
});

// 再对过滤后数字做平方操作
$squared = array_map(function($num) {
    return $num * $num;
}, $filtered);

print_r($squared);
?>

出力:

 Array
(
    [2] => 144
    [3] => 324
    [5] => 625
)

この例では、最初にarray_filterを使用して、 Array_mapが役に立たない作業を避けるために条件を満たさない要素を削除します。


ヒント2:チェーンコール、より簡潔なコードを書きます

PHP 7.4+は矢印関数をサポートしており、チェーンコールと組み合わせてより簡潔です。

 <?php
$numbers = [1, 5, 12, 18, 7, 25];

$result = array_map(
    fn($num) => $num * $num,
    array_filter($numbers, fn($num) => $num > 10)
);

print_r($result);
?>

ヒント3:マッピング後にフィルタリングし、最初にデータ形式を変換し、次にフォーマットに一致する要素をフィルタリングします

<?php
$urls = [
    'http://example.com',
    'ftp://fileserver.com',
    'https://secure.com',
];

// 最初に小文字プロトコルに変換します
$lowercased = array_map(fn($url) => strtolower($url), $urls);

// もう一度除外しますhttp契約の始まりURL
$httpUrls = array_filter($lowercased, fn($url) => str_starts_with($url, 'http'));

print_r($httpUrls);
?>

ヒント4:キー名でフィルター

array_filter array_filter_use_keyの2番目のパラメーターを使用してキー名に従ってフィルタリングし、 array_mapと組み合わせて値を処理できます。

 <?php
$data = [
    'name' => 'Alice',
    'age' => 25,
    'email' => '[email protected]',
    'score' => 92,
];

// フィルターはキー名のみを文字列として保持し、長さはより大きくなります3要素
$filtered = array_filter($data, fn($key) => strlen($key) > 3, ARRAY_FILTER_USE_KEY);

// 値を文字列形式に変換します
$mapped = array_map(fn($value) => (string)$value, $filtered);

print_r($mapped);
?>

4。概要

  • 最初にフィルタリングし、次にマッピングして不要な処理を減らします。

  • 最初にマップしてからフィルタリングすると、データ形式または構造を最初に統合して、簡単にフィルタリングできます。

  • 矢印関数とチェーンコールを使用して、クリーナーコードを書き込みます。

  • array_filter_use_keyと組み合わせて、キー名をフィルタリングします。

  • コンビネーションの使用により、コードロジックをより明確にし、複雑なループを回避し、コードの再利用性と読みやすさを改善します。

これら2つの機能の組み合わせと使用スキルをマスターすると、毎日のPHP開発で配列を処理し、効率的でエレガントなコードを書き込むことができます。


 <?php
// 包括的な例:空の値を除外します,文字列を大文字に変換します,返品結果
$data = ['apple', '', 'Banana', null, 'Cherry'];

$result = array_map(
    fn($item) => strtoupper($item),
    array_filter($data, fn($item) => !empty($item))
);

print_r($result);
?>