📜  like %% 在数组 php 中(1)

📅  最后修改于: 2023-12-03 14:43:53.906000             🧑  作者: Mango

在数组中使用 like 操作符(模糊匹配)的方法

在 PHP 中,我们经常需要对数组进行搜索和过滤操作。有时我们希望使用类似 SQL 中的 like 操作符来进行模糊匹配,以便更灵活地查找数组中的元素。本文介绍了几种方法来使用 like 操作符在数组中进行模糊匹配。

方法一:使用 preg_grep 函数
/**
 * 使用 `preg_grep` 函数在数组中进行模糊匹配
 *
 * @param array  $array     要搜索的数组
 * @param string $pattern   模糊匹配的模式
 * @param int    $flags     可选的标志参数,默认为 0
 * @return array 匹配到的元素数组
 */
function searchArray(array $array, string $pattern, int $flags = 0): array {
    $matches = preg_grep($pattern, $array, $flags);
    return $matches;
}

该方法使用 PHP 内置的 preg_grep 函数,它接收一个正则表达式模式 $pattern,在数组 $array 中搜索匹配的元素,并返回匹配的元素数组。

示例用法:

$fruits = ['apple', 'banana', 'cherry', 'durian'];

// 搜索以字母 'a' 开头的水果
$searchResults = searchArray($fruits, '/^a/');

// 输出匹配的结果
foreach ($searchResults as $fruit) {
    echo $fruit . PHP_EOL;
}

该例子将输出:

apple
方法二:使用 array_filter 函数
/**
 * 使用 `array_filter` 函数在数组中进行模糊匹配
 *
 * @param array    $array       要搜索的数组
 * @param callable $callback    指定的回调函数
 * @return array  匹配到的元素数组
 */
function searchArray(array $array, callable $callback): array {
    $matches = array_filter($array, $callback);
    return $matches;
}

该方法使用 PHP 内置的 array_filter 函数,该函数传入一个回调函数 $callback,在数组 $array 中对每个元素进行测试,如果回调函数返回 true,则保留该元素。

示例用法:

$fruits = ['apple', 'banana', 'cherry', 'durian'];

// 搜索以字母 'b' 结尾的水果
$searchResults = searchArray($fruits, function ($fruit) {
    return substr($fruit, -1) === 'b';
});

// 输出匹配的结果
foreach ($searchResults as $fruit) {
    echo $fruit . PHP_EOL;
}

该例子将输出:

banana
方法三:使用循环遍历数组

除了使用内置函数,我们还可以通过循环遍历数组的方式实现模糊匹配。

/**
 * 使用循环遍历进行模糊匹配
 *
 * @param array  $array     要搜索的数组
 * @param string $pattern   模糊匹配的模式
 * @return array 匹配到的元素数组
 */
function searchArray(array $array, string $pattern): array {
    $matches = [];
    foreach ($array as $element) {
        if (fnmatch($pattern, $element, FNM_CASEFOLD)) {
            $matches[] = $element;
        }
    }
    return $matches;
}

该方法使用了 PHP 的内置函数 fnmatch,它使用模式匹配字符串。

示例用法:

$fruits = ['apple', 'banana', 'cherry', 'durian'];

// 搜索包含 'a' 的水果
$searchResults = searchArray($fruits, '*a*');

// 输出匹配的结果
foreach ($searchResults as $fruit) {
    echo $fruit . PHP_EOL;
}

该例子将输出:

apple
banana

以上就是在 PHP 中如何使用 like 操作符(模糊匹配)在数组中进行搜索和过滤的几种方法。根据实际需求选择适合的方法来完成任务。