You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP多维数组单/多关键词搜索需求及示例数组

PHP多维数组关键词搜索解决方案

嘿,我来帮你搞定这个多维数组的关键词搜索需求!咱们直接上实用的代码和思路,保证你能快速复用。

首先,我先补全了你给出的示例数组(方便演示),然后写一个通用的搜索函数,支持单个或多个关键词,返回所有包含任意匹配关键词的子数组。

完整实现代码

// 补全后的示例多维数组
$array = [
    [
        'First_name' => 'Dina',
        'Last_Name' => 'Gomez',
        'Location' => 'Los Angeles, CA',
        'Work' => 'Youtube Service'
    ],
    [
        'First_name' => 'Lopa',
        'Last_Name' => 'Mitchel',
        'Location' => 'New York, NY',
        'Work' => 'Works with Mark'
    ],
    [
        'First_name' => 'Mark',
        'Last_Name' => 'Taylor',
        'Location' => 'Chicago, IL',
        'Work' => 'Freelance Developer'
    ]
];

/**
 * 搜索多维数组,返回包含任意关键词的子数组
 * @param array $array 要搜索的多维数组
 * @param string|array $keywords 单个关键词(字符串)或多个关键词(数组)
 * @return array 匹配的子数组集合
 */
function searchMultiArray($array, $keywords) {
    // 统一把关键词转成数组,同时转小写实现不区分大小写搜索(不需要区分的话去掉strtolower)
    $lowerKeywords = array_map('strtolower', (array)$keywords);
    $matchedItems = [];

    foreach ($array as $subArray) {
        $isMatched = false;
        // 遍历子数组的每一个值,检查是否包含关键词
        foreach ($subArray as $value) {
            $lowerValue = strtolower($value);
            foreach ($lowerKeywords as $keyword) {
                // PHP 8+用str_contains,低版本可以换成strpos($lowerValue, $keyword) !== false
                if (str_contains($lowerValue, $keyword)) {
                    $isMatched = true;
                    break 2; // 找到匹配直接跳出两层循环,不用继续检查
                }
            }
        }
        if ($isMatched) {
            $matchedItems[] = $subArray;
        }
    }

    return $matchedItems;
}

// 示例1:单个关键词搜索(搜索"mark")
$singleKeywordResult = searchMultiArray($array, 'mark');
echo "单个关键词搜索结果:\n";
print_r($singleKeywordResult);

// 示例2:两个关键词搜索(搜索"los angeles"或"developer")
$twoKeywordsResult = searchMultiArray($array, ['los angeles', 'developer']);
echo "\n两个关键词搜索结果:\n";
print_r($twoKeywordsResult);

关键细节说明

  • 不区分大小写搜索:代码里把关键词和数组值都转成了小写,如果你需要严格区分大小写,直接去掉所有strtolower的调用就行。
  • 兼容PHP版本:如果你的PHP版本低于8.0,把str_contains替换成strpos($lowerValue, $keyword) !== false就可以正常运行。
  • 灵活的关键词参数:既可以传单个字符串关键词,也可以传多个关键词的数组,函数会自动处理。
  • 效率优化:一旦在某个子数组里找到匹配的关键词,就用break 2跳出内层的两层循环,避免不必要的遍历。

扩展玩法

如果你需要更精准的搜索,比如只搜索特定字段(比如只搜First_name和Work),可以修改内层循环,只遍历指定字段:

// 替换原来的内层foreach
$targetFields = ['First_name', 'Work'];
foreach ($targetFields as $field) {
    if (!isset($subArray[$field])) continue;
    $lowerValue = strtolower($subArray[$field]);
    foreach ($lowerKeywords as $keyword) {
        if (str_contains($lowerValue, $keyword)) {
            $isMatched = true;
            break 2;
        }
    }
}

如果需要精确匹配(而不是包含关键词),把str_contains改成$lowerValue === $keyword即可。

内容的提问来源于stack exchange,提问作者I Am Stack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:29:35