当前位置: 首页> 最新文章列表> [PHP中array_values和array_keys函数如何组合使用?详细实例解析

[PHP中array_values和array_keys函数如何组合使用?详细实例解析

gitbox 2025-08-25

1. 基本介绍

  • :返回数组中所有的键名。如果指定了一个搜索的值,可以过滤出包含该值的所有键。

    <span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-variable">$search_value</span></span><span>, </span><span><span class="hljs-variable">$strict</span></span><span>);
    </span></span>
  • array_values函数:返回数组中所有的值,忽略键名,重新索引。

    <span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
    </span></span>

2. 简单示例

假设我们有一个关联数组,存储了多个学生的成绩,其中数组的键是学生的名字,值是他们的成绩。我们希望找出成绩为某个特定分数的所有学生。

<span><span><span class="hljs-variable">$students</span></span><span> = [
    </span><span><span class="hljs-string">'John'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>,
    </span><span><span class="hljs-string">'Alice'</span></span><span> =&gt; </span><span><span class="hljs-number">90</span></span><span>,
    </span><span><span class="hljs-string">'Bob'</span></span><span> =&gt; </span><span><span class="hljs-number">75</span></span><span>,
    </span><span><span class="hljs-string">'Charlie'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>,
    </span><span><span class="hljs-string">'David'</span></span><span> =&gt; </span><span><span class="hljs-number">95</span></span><span>
];

</span><span><span class="hljs-variable">$search_score</span></span><span> = </span><span><span class="hljs-number">85</span></span><span>;

</span><span><span class="hljs-comment">// 获取所有成绩为85的学生</span></span><span>
</span><span><span class="hljs-variable">$keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-variable">$search_score</span></span><span>);
</span><span><span class="hljs-variable">$students_with_score</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_intersect_key</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$keys</span></span><span>)));

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$students_with_score</span></span><span>);
</span></span>

输出

<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; </span><span><span class="hljs-number">85</span></span><span>
    [</span><span><span class="hljs-number">1</span></span><span>] =&gt; </span><span><span class="hljs-number">85</span></span><span>
)
</span></span>

3. 组合使用的场景

组合使用array_keysarray_values可以实现很多实际的功能,尤其是当我们需要处理数组的值和键时。

示例 1:根据值过滤出键,并重建一个索引数组

假设我们有一个混合的关联数组,其中有些值可能重复,且我们希望将该数组的键提取出来,生成一个仅包含特定值的重建数组。

<span><span><span class="hljs-variable">$items</span></span><span> = [
    </span><span><span class="hljs-string">'item1'</span></span><span> =&gt; </span><span><span class="hljs-string">'apple'</span></span><span>,
    </span><span><span class="hljs-string">'item2'</span></span><span> =&gt; </span><span><span class="hljs-string">'orange'</span></span><span>,
    </span><span><span class="hljs-string">'item3'</span></span><span> =&gt; </span><span><span class="hljs-string">'banana'</span></span><span>,
    </span><span><span class="hljs-string">'item4'</span></span><span> =&gt; </span><span><span class="hljs-string">'apple'</span></span><span>,
    </span><span><span class="hljs-string">'item5'</span></span><span> =&gt; </span><span><span class="hljs-string">'orange'</span></span><span>
];

</span><span><span class="hljs-variable">$filter_value</span></span><span> = </span><span><span class="hljs-string">'orange'</span></span><span>;

</span><span><span class="hljs-comment">// 获取包含"orange"的所有键</span></span><span>
</span><span><span class="hljs-variable">$keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$items</span></span><span>, </span><span><span class="hljs-variable">$filter_value</span></span><span>);

</span><span><span class="hljs-comment">// 使用array_values获取这些键对应的值</span></span><span>
</span><span><span class="hljs-variable">$filtered_values</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_intersect_key</span></span><span>(</span><span><span class="hljs-variable">$items</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$keys</span></span><span>)));

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$filtered_values</span></span><span>);
</span></span>

输出

<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; orange
    [</span><span><span class="hljs-number">1</span></span><span>] =&gt; orange
)
</span></span>
示例 2:过滤键名为特定值的所有项

如果你有一个多维数组,你可能需要找出满足某个条件的数组元素的值。通过组合array_keysarray_values,我们可以通过某个特定的条件过滤出结果。

<span><span><span class="hljs-variable">$products</span></span><span> = [
    </span><span><span class="hljs-string">'P001'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Laptop'</span></span><span>, </span><span><span class="hljs-string">'price'</span></span><span> =&gt; </span><span><span class="hljs-number">800</span></span><span>],
    </span><span><span class="hljs-string">'P002'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Phone'</span></span><span>, </span><span><span class="hljs-string">'price'</span></span><span> =&gt; </span><span><span class="hljs-number">400</span></span><span>],
    </span><span><span class="hljs-string">'P003'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Tablet'</span></span><span>, </span><span><span class="hljs-string">'price'</span></span><span> =&gt; </span><span><span class="hljs-number">300</span></span><span>],
    </span><span><span class="hljs-string">'P004'</span></span><span> =&gt; [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'Monitor'</span></span><span>, </span><span><span class="hljs-string">'price'</span></span><span> =&gt; </span><span><span class="hljs-number">600</span></span><span>],
];

</span><span><span class="hljs-variable">$target_price</span></span><span> = </span><span><span class="hljs-number">400</span></span><span>;

</span><span><span class="hljs-comment">// 获取所有价格等于400的商品</span></span><span>
</span><span><span class="hljs-variable">$product_keys</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_column</span></span><span>(</span><span><span class="hljs-variable">$products</span></span><span>, </span><span><span class="hljs-string">'price'</span></span><span>), </span><span><span class="hljs-variable">$target_price</span></span><span>);

</span><span><span class="hljs-comment">// 获取这些商品的详细信息</span></span><span>
</span><span><span class="hljs-variable">$target_products</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-title function_ invoke__">array_intersect_key</span></span><span>(</span><span><span class="hljs-variable">$products</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_flip</span></span><span>(</span><span><span class="hljs-variable">$product_keys</span></span><span>)));

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$target_products</span></span><span>);
</span></span>

输出

<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [name] =&gt; Phone
            [price] =&gt; </span><span><span class="hljs-number">400</span></span><span>
        )
)
</span></span>

4. 总结

array_valuesarray_keys这两个函数可以组合使用来完成一些复杂的数组操作。通过合理搭配这两个函数,可以帮助我们快速查找、过滤和重构数组。这在实际开发中尤为重要,特别是在处理多维数组、过滤数组中的特定值或键时,能大大提高代码的可读性和效率。

掌握了这两个函数的组合使用,可以让我们更灵活地处理数组数据,提高开发效率。