← PHP中的array_key_last():获取数组的最后一个键名 PHP中的krsort():按键名降序排序数组 →

PHP中的array_keys():获取数组的键名

原创 2026-05-22 PHP 已有人查阅

想拿到数组的所有键名?array_keys()就是干这个的。它返回数组里所有的键名,不管键名是数字还是字符串。

还可以传第二个参数,只返回匹配某个值的那些键名。这个函数从PHP 4.0就有了。

语法格式

array array_keys(array $array, mixed $search_value = null, bool $strict = false): array

参数说明:

参数 说明 必填?
array 要操作的数组 必填
search_value 只返回匹配这个值的键名 可选
strict 是否严格比较(===) 可选,默认false

返回值: 返回包含所有键名(或匹配的键名)的索引数组。

示例1:获取所有键名

<?php
$student = [
    "id" => 1001,
    "name" => "张伟",
    "score" => 85,
    "class" => "软件工程"
];

$keys = array_keys($student);
print_r($keys);
?>

输出:

Array
(
    [0] => id
    [1] => name
    [2] => score
    [3] => class
)

返回结果是一个索引数组,按原数组的顺序排列。

示例2:根据值查找键名

<?php
$scores = [
    "code001" => 85,
    "code002" => 92,
    "code003" => 78,
    "code004" => 92,
    "code005" => 88
];

// 找出所有成绩为92的学生ID
$keys_with_92 = array_keys($scores, 92);
print_r($keys_with_92);
?>

输出:

Array
(
    [0] => code002
    [1] => code004
)

值92出现了两次,返回了两个键名。这就是array_keys()的实用之处——array_search()只返回第一个匹配,而array_keys()返回所有匹配。

示例3:严格模式比较

<?php
$mixed = [
    "int_val" => 100,
    "string_val" => "100",
    "another" => 200,
    "zero_string" => "0"
];

// 非严格模式:100 和 "100" 被视为相等
$loose = array_keys($mixed, 100);
echo "非严格模式:\n";
print_r($loose);

// 严格模式:100 和 "100" 类型不同,不匹配
$strict = array_keys($mixed, 100, true);
echo "\n严格模式:\n";
print_r($strict);
?>

输出:

非严格模式:
Array
(
    [0] => int_val
    [1] => string_val
)

严格模式:
Array
(
    [0] => int_val
)

非严格模式下,整数100和字符串"100"都被匹配了。严格模式下只有类型也相同才匹配。

示例4:索引数组

<?php
$colors = ["红色", "绿色", "蓝色", "绿色", "黄颜色", "绿色"];
$keys_of_green = array_keys($colors, "绿色");
print_r($keys_of_green);
?>

输出:

Array
(
    [0] => 1
    [1] => 3
    [2] => 5
)

索引数组的键名就是数字下标。找出所有值为"绿色"的位置。

个人经验分享

  1. array_keys() vs array_search()

函数 返回 匹配数量
array_search() 第一个匹配的键名 只返回一个
array_keys() 所有匹配的键名(数组) 返回全部
 
$arr = ["a" => 1, "b" => 2, "c" => 1];
array_search(1, $arr);      // 返回 "a"
array_keys($arr, 1);        // 返回 ["a", "c"]
  1. 获取所有键名的替代方案

    • array_keys($arr):返回键名数组

    • array_values($arr):返回值数组

    • 这两个经常配合使用

  2. 性能方面
    array_keys()需要遍历整个数组,时间复杂度O(n)。大数组下如果只取第一个或之后一个键名,用array_key_first()array_key_last()更高效。

  3. 常见使用场景

    • 检查某个值是否存在并获取所有位置

    • 遍历数组时先拿键名再做其他操作

    • 配合array_fill_keys()创建新数组

示例5:代码号学习编程场景

<?php
// 场景:找出所有不及格的学生
$exam_results = [
    "code001" => 85,
    "code002" => 92,
    "code003" => 47,
    "code004" => 78,
    "code005" => 35,
    "code006" => 96,
    "code007" => 52,
    "code008" => 88
];

$failed_students = array_keys($exam_results, 35, false);  // 找到35分的
// 但这样只能找特定分数。更好的做法是筛选
$failed = [];
foreach ($exam_results as $id => $score) {
    if ($score < 60) {
        $failed[] = $id;
    }
}

echo "不及格的学生ID:\n";
print_r($failed);

// 获取所有及格学生的ID
$all_ids = array_keys($exam_results);
echo "\n所有学生ID:\n";
print_r($all_ids);
?>

输出:

不及格的学生ID:
Array
(
    [0] => code003
    [1] => code005
    [2] => code007
)

所有学生ID:
Array
(
    [0] => code001
    [1] => code002
    [2] => code003
    [3] => code004
    [4] => code005
    [5] => code006
    [6] => code007
    [7] => code008
)

示例6:查找多个匹配值

<?php
$intory = [
    "KB001" => "键盘",
    "MS002" => "鼠标",
    "MN003" => "显示器",
    "HP004" => "耳机",
    "MS005" => "鼠标",
    "KB006" => "键盘"
];

// 找出所有键盘的产品ID
$keyboard_ids = array_keys($intory, "键盘");
// 找出所有鼠标的产品ID
$mouse_ids = array_keys($intory, "鼠标");

echo "键盘ID:\n";
print_r($keyboard_ids);
echo "\n鼠标ID:\n";
print_r($mouse_ids);
?>

输出:

键盘ID:
Array
(
    [0] => KB001
    [1] => KB006
)

鼠标ID:
Array
(
    [0] => MS002
    [1] => MS005
)

示例7:多维数组的键名

<?php
$users = [
    "user1" => ["name" => "张伟", "age" => 25],
    "user2" => ["name" => "李芳", "age" => 23],
    "user3" => ["name" => "王磊", "age" => 26]
];

// 获取第一层键名
$top_level_keys = array_keys($users);
print_r($top_level_keys);

// 想要获取内层键名?需要额外处理
$inner_keys = array_keys($users["user1"]);
echo "\n内层键名:\n";
print_r($inner_keys);
?>

输出:

Array
(
    [0] => user1
    [1] => user2
    [2] => user3
)

内层键名:
Array
(
    [0] => name
    [1] => age
)

array_keys()只返回最外层的键名,不会递归到多维数组内部。

本节课程知识要点

  • array_keys()返回数组的所有键名(或匹配条件的键名)

  • 第二个参数可选:只返回匹配该值的键名

  • 第三个参数控制是否严格比较类型(===

  • 返回结果是索引数组(0,1,2...)

  • array_values()对应,一个取键名一个取值

  • array_search()的区别:后者只返回第一个匹配

  • 从PHP 4.0开始可用

← PHP中的array_key_last():获取数组的最后一个键名 PHP中的krsort():按键名降序排序数组 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号