ZetCode

PHP array_find_key 函数

最后修改于 2025 年 3 月 13 日

PHP 的 array_find_key 函数使用回调函数在数组中搜索键。它返回回调函数返回 true 的第一个键。

基本定义

array_find_key 函数搜索数组中满足条件的某个值。如果找到,则返回相应的键。

语法:array_find_key(array $array, callable $callback): mixed。回调测试每个值。如果找不到匹配项,则返回 null。

基本的 array_find_key 示例

此示例查找数组中第一个偶数的键。

basic_array_find_key.php
<?php

declare(strict_types=1);

function array_find_key(array $array, callable $callback): mixed {
    foreach ($array as $key => $value) {
        if ($callback($value)) {
            return $key;
        }
    }
    return null;
}

$numbers = [1, 3, 4, 7, 8];
$firstEvenKey = array_find_key($numbers, fn($n): bool => $n % 2 === 0);

echo "First even at key: " . $firstEvenKey; 

回调检查偶数。它在找到值为 4 的地方返回键 2。搜索在第一个匹配项处停止。

查找字符串键

搜索值与特定字符串模式匹配的键。

string_search.php
<?php

declare(strict_types=1);

$users = [
    'john' => 'admin',
    'jane' => 'editor',
    'bob' => 'viewer',
    'alice' => 'editor'
];

$editorKey = array_find_key($users, fn($role): bool => $role === 'editor');

echo "First editor: " . $editorKey; 

这会找到第一个角色为“editor”的用户。回调比较每个值,并返回“jane”作为第一个匹配的键。

对象属性搜索

查找对象属性满足特定条件的键。

object_search.php
<?php

declare(strict_types=1);

class Product {
    public function __construct(
        public string $name,
        public float $price
    ) {}
}

$products = [
    'p1' => new Product("Laptop", 999.99),
    'p2' => new Product("Phone", 699.99),
    'p3' => new Product("Tablet", 399.99)
];

$affordableKey = array_find_key($products, 
    fn(Product $p): bool => $p->price < 700);

echo "First affordable: " . $affordableKey; 

这会找到价格低于 700 美元的第一件商品。回调检查 price 属性,并返回“p2”(Phone)作为第一个匹配项。

无匹配场景

当没有元素满足回调条件时,函数返回 null。

no_match.php
<?php

declare(strict_types=1);

$colors = ['red', 'green', 'blue'];
$result = array_find_key($colors, fn($c): bool => $c === 'yellow');

var_dump($result); 

由于数组中没有“yellow”,因此函数返回 null。这有助于区分找到值为 null 的键和找不到匹配项。

提前终止

array_find_key 在找到第一个匹配项时停止,这样很高效。

early_termination.php
<?php

declare(strict_types=1);

$data = [10, 20, 30, 40, 50];
$key = array_find_key($data, function($n): bool {
    echo "Checking $n\n";
    return $n > 25;
});

echo "Found at key: " . $key; 

该函数在找到 30 后停止检查。您只会看到 10、20 和 30 的输出,这展示了短路行为。

最佳实践

来源

PHP Array Search 文档(相关功能)

本教程涵盖了 PHP array_find_key 模式,并通过实际示例展示了其在数组搜索场景中的用法。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教学编程方面拥有十多年的经验。

列出 所有 PHP 数组函数