登录
首页 >  文章 >  php教程

PHP用array_keys实现二维转一维方法

时间:2026-02-05 20:14:41 309浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《php用array_keys实现二维转一维【步骤】》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

array_keys不能直接将二维数组转为一维,仅能提取指定数组的键名;需配合循环遍历各子数组并调用array_keys,再合并去重才能获得所有键的一维数组。

php怎样用array_keys辅助二维转一维_phparray_keys提键降维【步骤】

array_keys 本身不能直接二维转一维

array_keys 的作用只是提取数组的键名,返回一个索引数组,它不处理嵌套结构。如果你尝试对二维数组直接调用 array_keys($arr),得到的只是外层数组的键(比如 [0, 1, 2]),完全不会触达内层键或值。所谓“用 array_keys 提键降维”,本质是把它作为辅助工具,配合循环或回调来收集特定层级的键——不是靠它单干。

真正需要的是遍历 + array_keys 组合取键

常见需求其实是:把二维数组中每个子数组的键,合并成一个一维数组(去重 or 不去重)。这时 array_keys 才派上用场:

  • 对每个子数组调用 array_keys($sub) 拿到它的所有键
  • array_mergearray_push(...) 累积结果
  • 最后可选 array_unique 去重

示例:

$data = [
    ['name' => 'a', 'age' => 20],
    ['name' => 'b', 'city' => 'sh'],
    ['age' => 25, 'city' => 'bj']
];
$allKeys = [];
foreach ($data as $sub) {
    $allKeys = array_merge($allKeys, array_keys($sub));
}
// $allKeys → ['name', 'age', 'name', 'city', 'age', 'city']
$uniqueKeys = array_unique($allKeys); // ['name', 'age', 'city']

别误用 array_keys 去“提取值”或“展平数组”

有人看到“提键”就以为能顺手把值也拉出来,但 array_keys 不接受回调,也不能指定取哪一层的值。以下操作是错的:

  • array_keys($data, 'name') —— 这是在外层数组里找值等于 'name' 的键,不是进子数组查
  • array_keys($data[0]) 单独用是对的,但漏掉其他子数组就只拿到第一行的键
  • 想得到 ['a', 'b', 25] 这类值的集合?得用 array_column($data, 'name'),不是 array_keys

混淆键和值、忽略循环覆盖,是实际写的时候最常卡住的地方。

性能与兼容性注意点

如果二维数组很大(比如上千个子数组),反复 array_merge 会产生较多临时数组,内存增长明显。更省内存的做法是预分配 + foreach + isset 去重:

$keys = [];
foreach ($data as $sub) {
    foreach (array_keys($sub) as $k) {
        $keys[$k] = true; // 利用键唯一性自动去重
    }
}
$keys = array_keys($keys); // 最终得到去重后的键数组

这个写法在 PHP 5.6+ 和 8.x 下行为一致,且比 array_unique(array_merge(...)) 更稳——尤其当键本身是字符串且含非 ASCII 字符时,array_unique 在某些版本默认用 string 比较,可能意外丢键。

今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>